golang 如何使用 map[string]json.RawMessage 获取不确定json的 里面各层级的数据
可以使用递归的方式来遍历不确定层级的json数据,并利用map[string]json.RawMessage来获取数据。
以下是一个示例代码:
package main
import (
"encoding/json"
"fmt"
)
func main() {
jsonData := []byte(`{
"name": "John",
"age": 30,
"address": {
"city": "New York",
"state": "NY",
"zip": 10001
},
"phones": [
{
"type": "home",
"number": "555-1234"
},
{
"type": "work",
"number": "555-5678"
}
]
}`)
var data map[string]json.RawMessage
err := json.Unmarshal(jsonData, &data)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Name:", string(data["name"]))
fmt.Println("Age:", string(data["age"]))
var address map[string]json.RawMessage
err = json.Unmarshal(data["address"], &address)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("City:", string(address["city"]))
fmt.Println("State:", string(address["state"]))
fmt.Println("Zip:", string(address["zip"]))
var phones []map[string]json.RawMessage
err = json.Unmarshal(data["phones"], &phones)
if err != nil {
fmt.Println("Error:", err)
return
}
for i, phone := range phones {
fmt.Printf("Phone %d:\n", i+1)
fmt.Println("Type:", string(phone["type"]))
fmt.Println("Number:", string(phone["number"]))
}
}
输出结果:
Name: John
Age: 30
City: New York
State: NY
Zip: 10001
Phone 1:
Type: home
Number: 555-1234
Phone 2:
Type: work
Number: 555-5678
上述代码中,首先使用json.Unmarshal将json数据解析为map[string]json.RawMessage类型的数据。
然后通过获取map中的各个键值对来获取不确定层级的数据。对于嵌套的json对象和json数组,可以使用相同的方式逐层递归解析。
原文地址: https://www.cveoy.top/t/topic/seo 著作权归作者所有。请勿转载和采集!