可以使用递归的方式来遍历不确定层级的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数组,可以使用相同的方式逐层递归解析。

golang 如何使用 map[string]json.RawMessage 获取不确定json的 里面各层级的数据

原文地址: https://www.cveoy.top/t/topic/seo 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录