如何在 Go 中动态解析 JSON?
How dynamically Parse JSON in Go?
所以我在用 Go 解析 JSON 文件时遇到了一些问题。我已经尝试了很多解决方法,但我似乎没有找到解决方案。
假设我有一些 JSON 文件看起来像这样
{
"products": [
{
"id": 201,
"name": "Nulla",
"price": 207,
"categoryId": 1,
"rate": 2.44,
"content": "Culpa sed tenetur incidunt quia veniam sed molliti",
"review": 78,
"imageUrl": "https://dummyimage.com/400x350"
},
{
"id": 202,
"name": "Corporis",
"price": 271,
"categoryId": 1,
"rate": 2.18,
"content": "Nam incidunt blanditiis odio inventore. Nobis volu",
"review": 67,
"imageUrl": "https://dummyimage.com/931x785"
},
{
"id": 203,
"name": "Minus",
"price": 295,
"categoryId": 1,
"rate": 0.91,
"content": "Quod reiciendis aspernatur ipsum cum debitis. Quis",
"review": 116,
"imageUrl": "https://dummyimage.com/556x985"
}
]
}
我想动态解析它(不为它创建结构)。我已经尝试使用 map[string]interface{}
方式,但它不起作用。我已经尝试了另一个名为 jsoniter 的第三方库,但它也不起作用。
我能让它“以某种方式”工作的唯一方法是尝试用方括号包裹 json_string
[jsonstring]
这是我的代码。
file, _ := ioutil.ReadFile("p1.json")
var results []map[string]interface{}
json.Unmarshal(file, &results)
fmt.Printf("%+v", results) // Output []
经常检查错误。检查来自 json.Unmarshal
的错误,您可以看到:
2009/11/10 23:00:00 json: cannot unmarshal object into Go value of type []map[string]interface {}
您正在使用地图的一部分 []map[string]interface{}
编组到地图,而不是您想要的地图:
// var results []map[string]interface{} // bad-type
var results map[string]interface{} // correct-type
err := json.Unmarshal(body, &results)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v", results) // Output [map[categoryId:1 content:Culpa sed tenetur incidunt quia veniam sed molliti id:20 ...
所以我在用 Go 解析 JSON 文件时遇到了一些问题。我已经尝试了很多解决方法,但我似乎没有找到解决方案。
假设我有一些 JSON 文件看起来像这样
{
"products": [
{
"id": 201,
"name": "Nulla",
"price": 207,
"categoryId": 1,
"rate": 2.44,
"content": "Culpa sed tenetur incidunt quia veniam sed molliti",
"review": 78,
"imageUrl": "https://dummyimage.com/400x350"
},
{
"id": 202,
"name": "Corporis",
"price": 271,
"categoryId": 1,
"rate": 2.18,
"content": "Nam incidunt blanditiis odio inventore. Nobis volu",
"review": 67,
"imageUrl": "https://dummyimage.com/931x785"
},
{
"id": 203,
"name": "Minus",
"price": 295,
"categoryId": 1,
"rate": 0.91,
"content": "Quod reiciendis aspernatur ipsum cum debitis. Quis",
"review": 116,
"imageUrl": "https://dummyimage.com/556x985"
}
]
}
我想动态解析它(不为它创建结构)。我已经尝试使用 map[string]interface{}
方式,但它不起作用。我已经尝试了另一个名为 jsoniter 的第三方库,但它也不起作用。
我能让它“以某种方式”工作的唯一方法是尝试用方括号包裹 json_string
[jsonstring]
这是我的代码。
file, _ := ioutil.ReadFile("p1.json")
var results []map[string]interface{}
json.Unmarshal(file, &results)
fmt.Printf("%+v", results) // Output []
经常检查错误。检查来自 json.Unmarshal
的错误,您可以看到:
2009/11/10 23:00:00 json: cannot unmarshal object into Go value of type []map[string]interface {}
您正在使用地图的一部分 []map[string]interface{}
编组到地图,而不是您想要的地图:
// var results []map[string]interface{} // bad-type
var results map[string]interface{} // correct-type
err := json.Unmarshal(body, &results)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v", results) // Output [map[categoryId:1 content:Culpa sed tenetur incidunt quia veniam sed molliti id:20 ...