JSON-iterator 是一个用于高性能 JSON 解析的库,它提供了一种快速解析 JSON 数据的方式(快10倍)。
以下是使用 JSON-iterator 库的基本步骤:
安装 JSON-iterator 库
可以使用 go get 命令安装库:
go get github.com/json-iterator/go
你可以在 https://github.com/json-iterator/go 上找到 JSON-iterator 库的代码,
导入 JSON-iterator 库 在 Go 代码中导入 JSON-iterator 库,可以使用以下命令:
import "github.com/json-iterator/go"
解析 JSON 数据
在 Go 代码中解析 JSON 数据,可以使用 JSON-iterator 库提供的 Unmarshal 函数:
var json = `{"name": "John", "age": 30}`
var data map[string]interface{}
err := jsoniter.Unmarshal([]byte(json), &data)
if err != nil {
fmt.Println("解析失败", err)
}
fmt.Printf("解析结果: %v\n", data)
这个例子解析了一个包含 name 和 age 属性的 JSON 对象,并将其转换为 Go 的 map[string]interface{} 类型。
序列化 Go 对象到 JSON
JSON-iterator 还提供了 Marshal 函数来将 Go 对象序列化为 JSON 字符串。例如,以下代码将一个 Go 对象转换为 JSON 字符串:
data := map[string]interface{}{"name": "John", "age": 30}
json, err := jsoniter.Marshal(data)
if err != nil {
fmt.Println("序列化失败", err)
}
fmt.Println("序列化结果:", string(json))
JSON编码为字符串
jsoniter "github.com/json-iterator/go"
func JSONMarshalToString(v interface{}) string {
s, err := jsoniter.MarshalToString(v)
if err != nil {
return ""
}
return s
}
字符串转JSON编码
func StringToJSON(val interface{}) interface{} {
str := val.(string)
if strings.HasPrefix(str, "{") && strings.HasSuffix(str, "}") {
var parameter interface{}
_ = json.Unmarshal([]byte(str), ¶meter)
return parameter
} else {
var parameter []interface{}
_ = json.Unmarshal([]byte(str), ¶meter)
return parameter
}
}
案例
type User struct {
Name string `json:"name"`
Address string `json:"address"`
Age int `json:"age"`
}
type City struct {
Status string `json:"status"`
Code int `json:"code"`
Data string `json:"data"`
}
func Test_json(t *testing.T) {
var p1 User
p1.Age = 23
p1.Address = "北京"
p1.Name = "zhang san"
toString := JSONMarshalToString(p1)
fmt.Println(toString)
// {"name":"zhang san","address":"北京","age":23}
var c1 City
c1.Data = toString
c1.Code = 100
c1.Status = "ok"
marshalToString := JSONMarshalToString(c1)
fmt.Println(marshalToString)
//{"status":"ok","code":100,"data":"{\"name\":\"zhang san\",\"address\":\"北京\",\"age\":23}"}
}
网友评论