在Go语言中,可以使用标准库中的encoding/json包来解析JSON数据。对于多层不确定的JSON数据,可以使用map[string]interface{}类型来表示。该类型表示了一个键值对的集合,其中键是字符串类型,值可以是任意类型,包括stringintfloatbool[]interface{}map[string]interface{}等。

以下是一个示例JSON数据:

{
    "name": "Alice",
    "age": 30,
    "address": {
        "city": "New York",
        "state": "NY",
        "zipcode": "10001"
    },
    "phone_numbers": [
        {
            "type": "home",
            "number": "123-456-7890"
        },
        {
            "type": "work",
            "number": "987-654-3210"
        }
    ]
}

要获取其中的数据,可以使用以下代码:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    jsonStr := `{"name":"Alice","age":30,"address":{"city":"New York","state":"NY","zipcode":"10001"},"phone_numbers":[{"type":"home","number":"123-456-7890"},{"type":"work","number":"987-654-3210"}]}`
    var data map[string]interface{}
    err := json.Unmarshal([]byte(jsonStr), &data)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    name := data["name"].(string)
    age := int(data["age"].(float64))
    address := data["address"].(map[string]interface{})
    city := address["city"].(string)
    state := address["state"].(string)
    zipcode := address["zipcode"].(string)
    phoneNumbers := data["phone_numbers"].([]interface{})
    for i, phoneNumber := range phoneNumbers {
        phoneNumberMap := phoneNumber.(map[string]interface{})
        phoneType := phoneNumberMap["type"].(string)
        number := phoneNumberMap["number"].(string)
        fmt.Printf("Phone %d: %s - %s\n", i+1, phoneType, number)
    }
}

输出结果:

Phone 1: home - 123-456-7890
Phone 2: work - 987-654-3210

在上面的示例中,我们首先使用json.Unmarshal函数将JSON字符串解析成一个map[string]interface{}类型的变量data。然后,我们可以使用data变量中的键来获取对应的值。例如,data["name"]获取到的是一个interface{}类型的值,我们需要使用类型断言将其转换成string类型,即data["name"].(string)

对于嵌套的JSON数据,我们可以使用类型断言将其转换成map[string]interface{}类型,例如data["address"].(map[string]interface{})。对于phone_numbers键对应的值,它是一个[]interface{}类型的切片,我们可以使用类型断言将其转换成切片类型,并遍历其中的每个元素。对于每个元素,它是一个map[string]interface{}类型,我们可以使用类型断言将其转换成该类型,并获取其中的typenumber键对应的值。

需要注意的是,在使用类型断言时,如果类型不匹配,会导致运行时错误。因此,在实际使用中,需要根据实际情况进行类型检查和错误处理。

golang 多层不确定的json 如何获取里面的数据

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

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