有关 golang 里JSON 使用的用法整理
package main
import (
"encoding/json"
"fmt"
)
type JSON = map[string]interface{}
func makeJson() JSON {
var obj = make(JSON)
return obj
}
func stringify(obj JSON) string {
b, err := json.Marshal(obj)
if err != nil {
fmt.Printf("marshal failed, err:%v\n", err)
}
return string(b)
}
func parse(str string) JSON {
var obj = makeJson()
err := json.Unmarshal([]byte(str), &obj)
// 结果:map字典: map[count:1]
//fmt.Printf("map字典: %v\n", obj) // 1
if err != nil {
fmt.Printf("unmarshal failed, err:%v\n", err)
return obj
}
return obj
}
func main() {
var obj = makeJson()
obj["count"] = 123 // int
obj["name"] = "test" // string
var subobj = makeJson()
subobj["aaa"] = 111
subobj["bbb"] = 22.33
subobj["ccc"] = "test"
obj["subobj"] = subobj // int
fmt.Printf("打印字典: %v\n", obj)
str := stringify(obj)
fmt.Printf("打印json: %v\n", str)
fmt.Printf("打印 obj: %v\n", parse(str))
newobj := parse(str)
fmt.Printf("打印 json: %v\n", newobj["subobj"])
sub := newobj["subobj"].(JSON)
fmt.Printf("打印 json: %v\n", sub["aaa"])
}
通过 Path Syntax 解析/编辑JSON
GJSON 是一个 Go 包,它提供了一种从 json 文档中获取值的快速简单的方法。它具有单行检索、点符号路径、迭代和解析 json 行等功能。
本自述文件是如何使用 GJSON 的快速概述,有关更多信息,请查看GJSON 语法。
package main
import "github.com/tidwall/gjson"
const json = `{"name":{"first":"Janet","last":"Prichard"},"age":47}`
func main() {
value := gjson.Get(json, "name.last")
println(value.String())
}
SJSON 是一个 Go 包,它提供了一种非常快速和简单的方法来在 json 文档中设置值。要快速检索 json 值,请查看GJSON。
对于命令行界面,请查看JJ。
package main
import "github.com/tidwall/sjson"
const json = `{"name":{"first":"Janet","last":"Prichard"},"age":47}`
func main() {
value, _ := sjson.Set(json, "name.last", "Anderson")
println(value)
}
参考
go中对json数据的解析和封装
Jsonvalue - Go map[string]interface{} 更快和更方便的替代品