go-simplejson 是一个用于处理 JSON 数据的 Go 库,提供了便捷的 API 来解析和操作 JSON 格式的数据。它特别适合处理动态或者不确定的 JSON 数据结构。
在下面的代码示例中,我们将演示如何使用 go-simplejson 解析 JSON 数据,访问不同层级的字段,以及修改 JSON 数据。
安装 go-simplejson
首先,你需要安装 go-simplejson 库。你可以通过以下命令安装:
go get /bitly/go-simplejson示例:使用 go-simplejson 解析和操作 JSON 数据

package main
import (
"fmt"
"log"
"/bitly/go-simplejson"
)
func main() {
// 示例 JSON 数据
jsonData := `{
"name": "John Doe",
"age": 30,
"address": {
"city": "New York",
"zip": "10001"
},
"phones": [
{"type": "home", "number": "123-4567"},
{"type": "work", "number": "987-6543"}
]
}`
// 解析 JSON 数据
js, err := simplejson.NewJson([]byte(jsonData))
if err != nil {
log.Fatal(err)
}
// 访问 JSON 对象中的字段
name, err := js.Get("name").String()
if err != nil {
log.Fatal(err)
}
fmt.Println("Name:", name)
age, err := js.Get("age").Int()
if err != nil {
log.Fatal(err)
}
fmt.Println("Age:", age)
// 访问嵌套的 JSON 对象
city, err := js.Get("address").Get("city").String()
if err != nil {
log.Fatal(err)
}
fmt.Println("City:", city)
// 访问数组中的元素
phone, err := js.Get("phones").GetIndex(0).Get("number").String()
if err != nil {
log.Fatal(err)
}
fmt.Println("First Phone Number:", phone)
// 修改 JSON 数据
js.Set("name", "Jane Doe")
js.Get("address").Set("city", "Los Angeles")
// 输出修改后的 JSON 数据
updatedJSON, err := js.MarshalJSON()
if err != nil {
log.Fatal(err)
}
fmt.Println("Updated JSON:", string(updatedJSON))
}代码解析:
- 解析 JSON 数据:
- 使用
simplejson.NewJson([]byte(jsonData))解析 JSON 字符串。这个方法会返回一个*simplejson.Json类型的对象,我们可以用它来访问和操作 JSON 数据。
- 访问字段:
-
js.Get("name").String():获取 JSON 对象中name字段的值,并将其转换为字符串。 -
js.Get("age").Int():获取age字段的值,并将其转换为整数。
- 访问嵌套对象:
-
js.Get("address").Get("city").String():访问address对象中的city字段,并获取其值。
- 访问数组:
-
js.Get("phones").GetIndex(0).Get("number").String():访问phones数组中的第一个元素,并获取number字段的值。
- 修改 JSON 数据:
-
js.Set("name", "Jane Doe"):修改name字段的值为"Jane Doe"。 -
js.Get("address").Set("city", "Los Angeles"):修改嵌套的address对象中的city字段为"Los Angeles"。
- 序列化 JSON 数据:
-
js.MarshalJSON():将修改后的 JSON 对象序列化回 JSON 格式的字符串。
示例输出:
Name: John Doe
Age: 30
City: New York
First Phone Number: 123-4567
Updated JSON: {"name":"Jane Doe","age":30,"address":{"city":"Los Angeles","zip":"10001"},"phones":[{"type":"home","number":"123-4567"},{"type":"work","number":"987-6543"}]}
















