在 Go 语言中,解析 JSON 性能的优劣取决于所使用的库。以下是对比 encoding/json、jsoniter、go-json 和 gjson 的性能分析和推荐:
1. encoding/json(标准库)
简介
示例
import (
"encoding/json"
"fmt"
)
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
jsonString := `{"name":"Alice","age":30}`
var user User
err := json.Unmarshal([]byte(jsonString), &user)
if err != nil {
fmt.Println(err)
}
fmt.Println(user)
}
2. jsoniter
简介
安装
go get -u github.com/json-iterator/go
示例
import (
"fmt"
jsoniter "github.com/json-iterator/go"
)
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
var json = jsoniter.ConfigCompatibleWithStandardLibrary
jsonString := `{"name":"Alice","age":30}`
var user User
err := json.Unmarshal([]byte(jsonString), &user)
if err != nil {
fmt.Println(err)
}
fmt.Println(user)
}
3. go-json
简介
安装
go get -u github.com/goccy/go-json
示例
import (
"fmt"
json "github.com/goccy/go-json"
)
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
jsonString := `{"name":"Alice","age":30}`
var user User
err := json.Unmarshal([]byte(jsonString), &user)
if err != nil {
fmt.Println(err)
}
fmt.Println(user)
}
4. gjson
简介
安装
go get -u github.com/tidwall/gjson
示例
import (
"fmt"
"github.com/tidwall/gjson"
)
func main() {
jsonString := `{"name":"Alice","age":30}`
// 使用 gjson 获取 name 字段
name := gjson.Get(jsonString, "name").String()
age := gjson.Get(jsonString, "age").Int()
fmt.Printf("Name: %s, Age: %d\n", name, age)
}
5.GF框架中的gjson
GF简介
使用了GF框架的著名项目
GF 框架的主要特性
简介
安装
go get -u github.com/gogf/gf/v2/encoding/gjson
示例
import (
"fmt"
"github.com/gogf/gf/v2/encoding/gjson"
)
func main() {
jsonData := `{"name": "Alice", "age": 30, "address": {"city": "Wonderland", "zip": "12345"}}`
j, err := gjson.LoadContent(jsonData)
if err != nil {
fmt.Println("Failed to parse JSON:", err)
return
}
name := j.GetString("name")
city := j.GetString("address.city")
fmt.Println("Name:", name)
fmt.Println("City:", city)
}