# encoding/json ``` package main import ( "encoding/json" "fmt" ) // 结构体 (首字母必须大写) type Human struct { Name string Age int Sex bool } func main() { // 序列号 a := Human{"于晓波", 23, true} result, _ := json.Marshal(a) fmt.Println(string(result)) // {"Name":"于晓波", "Age":23, "Sex":true} // 反序列号 b := "{\"Name\":\"于晓波\", \"Age\":23, \"Sex\":true}" var f interface{} err := json.Unmarshal([], &f) } ``` # jsonparser ``` package main import ( "fmt" "github.com/buger/jsonparser" ) func main() { data := []byte(`{ "person": { "name": { "first": "Leonid", "last": "Bugaev", "fullName": "余" }, "github": { "handle": "buger", "followers": 109 }, "avatars": [ { "url": "https://avatars1.githubusercontent.com/u/14009?v=3&s=460", "type": "thumbnail" } ] }, "company": { "name": "Acme" } }`) // 您可以通过提供Get函数的参数来指定键路径 // res := jsonparser.Get(data, "person", "name", "fullName") // fmt.Println(res) // 如果您确切知道关键数据类型,则有`GetInt`和`GetBoolean`帮助器。 jsonparser.GetInt(data, "person", "github", "followers") // 当您尝试获取对象时,它将返回[] byte切片指针,指向包含该对象的数据 // 在`company`中将是`{“ name”:“ Acme”}` jsonparser.Get(data, "company") // 如果密钥不存在,将引发错误 // var size int64 // if value, err := jsonparser.GetInt(data, "company", "size"); err == nil { // // size = value // } // 您可以使用ArrayEach帮助器来迭代项目[item1,item2 .... itemN] jsonparser.ArrayEach(data, func(value []byte, dataType jsonparser.ValueType, offset int, err error) { fmt.Println(jsonparser.Get(value, "url")) }, "person", "avatars") // 或者使用可以按索引访问字段! // jsonparser.GetInt("person", "avatars", "[0]", "url") // 您可以使用`ObjectEach`帮助程序来迭代对象{“ key1”:object1,“ key2”:object2,....“” keyN“:objectN} jsonparser.ObjectEach(data, func(key []byte, value []byte, dataType jsonparser.ValueType, offset int) error { fmt.Printf("Key: '%s'\n Value: '%s'\n Type: %s\n", string(key), string(value), dataType) return nil }, "person", "name") // 提取多个密钥的最有效方法是`EachKey`。 // paths := [][]string{ // []string{"person", "name", "fullName"}, // []string{"person", "avatars", "[0]", "url"}, // []string{"company", "url"}, // } // jsonparser.EachKey(data, func(idx int, value []byte, vt jsonparser.ValueType, err error){ // switch idx { // case 0: // []string{"person", "name", "fullName"} // ... // case 1: // []string{"person", "avatars", "[0]", "url"} // ... // case 2: // []string{"company", "url"}, // ... // } // }, paths...) res, _ := jsonparser.Set([]byte("{}"), []byte("hghgahgfha"), "es", "wq", "[0]", "url") fmt.Println(string(res)) // 有关更多信息,请参见下面的文档 } ``` #