Erlo

golang 使用map处理多级json后输出map中的数组

2021-04-19 15:31:42 发布   548 浏览  
页面报错/反馈
收藏 点赞

/*
 * @Descripttion:
 * @version:
 * @Author: 步荀仙
 * @Date: 2019-10-30 15:41:34
 * @LastEditors: 步荀仙
 * @LastEditTime: 2019-10-31 09:15:59
 */
package main

import (
	"encoding/json"
	"fmt"
)
//定义一个接受json的结构退
type testjson struct {
	Test1 string  `json:"test1"`
	Test2 int     `json:"test2"`
	Test3 []test3 `json:"test3"`
	Test6 test6   `json:"test6"`
}

type test3 struct {
	Test4 string `json:"test4"`
	Test5 int    `json:"test5"`
}

type test6 struct {
	Test7 string `json:"test7"`
	Test8 int    `json:"test8"`
}

func main() {
	// 想结构体中添加数据
	jsonData := testjson{
		Test1: "步荀仙",
		Test2: 999,
	}
	jsonData2 := test3{
		Test4: "南宫恨",
		Test5: 888,
	}
	jsonData3 := test3{
		Test4: "俏如来",
		Test5: 777,
	}
	jsonData.Test6.Test7 = "锦烟霞"
	jsonData.Test6.Test8 = 123
	jsonData.Test3 = append(jsonData.Test3, jsonData2)
	jsonData.Test3 = append(jsonData.Test3, jsonData3)

	// 格式化为json数据
	mapTestData := make(map[string]interface{})
	jsonInfo, _ := json.Marshal(jsonData)

	// 反格式化为map
	_ = json.Unmarshal(jsonInfo, &mapTestData)

	// 输出map中的数据
	fmt.Println(mapTestData)
	// 输出map["test3"]中数组索引为0的map["test4"]中的value
	fmt.Println(mapTestData["test3"].([]interface{})[0].(map[string]interface{})["test4"])
	// 输出map["test6中"]结构体map["test7"]中的数据
	fmt.Println(mapTestData["test6"].(map[string]interface{})["test7"])
	// 循环输出map["test3"]中数组的值
	for _, j := range mapTestData["test3"].([]interface{}) {
		fmt.Println(j.(map[string]interface{}))
	}
}

输出结果

root@ main [master] $ go run service.go 
map[test1:步荀仙 test2:999 test3:[map[test4:南宫恨 test5:888] map[test4:俏如来 test5:777]] test6:map[test7:锦烟霞 test8:123]]
南宫恨
锦烟霞
map[test4:南宫恨 test5:888]
map[test4:俏如来 test5:777]
登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认