GoLand解析json获取指定字段内容

wangcheng · · 3405 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

根据字节切片动态解析json指定字段,初学go可以相互多交流,不妥之处请留言说明,我会及时改正 data.json ``` json { "basic_info":{ "upload_date":"2021-04-25 14:17:05.974168", "device_id":"AUTH", "tss":{ "date":"2021", "system_version":{ "system":"1.7.1", "plug":"1.7.3", "patch":"1.7.22" } } } } ``` code.go ```go import ( "encoding/json" "fmt" "io/ioutil" ) /** * 获取json字符串中指定字段内容 ioutil.ReadFile()读取字节切片 * @param bytes json字符串字节数组 * @param field 可变参数,指定字段 */ func getJsonField(bytes []byte, field ...string) []byte { if len(field) < 1 { fmt.Printf("At least two parameters are required.") return nil } //将字节切片映射到指定map上 key:string类型,value:interface{} 类型能存任何数据类型 var mapObj map[string]interface{} json.Unmarshal(bytes, &mapObj) var tmpObj interface{} tmpObj = mapObj for i := 0; i < len(field); i++ { tmpObj = tmpObj.(map[string]interface{})[field[i]] if tmpObj == nil { fmt.Printf("No field specified: %s ", field[i]) return nil } } result, err := json.Marshal(tmpObj) if err != nil { fmt.Print(err) return nil } return result } func main() { bytes, _ := ioutil.ReadFile("/tmp/data.json") s := getJsonField(bytes, "basic_info", "tss") fmt.Println(string(s)) } ``` 结果输出 ``` shell root@Sangfor:/tmp/go_code# go run code.go {"date":"2021","system_version":{"patch":"1.7.22","plug":"1.7.3","system":"1.7.1"}} ```

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3405 次点击  
加入收藏 微博
3 回复  |  直到 2021-06-05 15:36:07
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传