在Go中,可以使用json.Unmarshal()函数将JSON字符串加载到结构体中。但是,由于JSON字符串中的层级是不固定的,我们无法提前定义一个对应的结构体。

为了解决这个问题,我们可以使用map[string]interface{}类型来解析不固定层级的JSON字符串。这样可以将JSON字符串解析为一个嵌套的map,其中的每个键都是字符串,每个值可以是任意类型。

以下是一个示例代码,展示了如何将不固定层级的JSON字符串加载到结构体中:

package main

import (
	"encoding/json"
	"fmt"
)

type Person struct {
	Name    string
	Age     int
	Address string
}

func main() {
	jsonStr := `{
		"name": "John",
		"age": 30,
		"address": {
			"street": "123 Main St",
			"city": "New York",
			"state": "NY"
		}
	}`

	var data map[string]interface{}
	err := json.Unmarshal([]byte(jsonStr), &data)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	person := Person{
		Name:    data["name"].(string),
		Age:     int(data["age"].(float64)),
		Address: data["address"].(map[string]interface{})["street"].(string),
	}

	fmt.Println(person)
}

在上面的代码中,我们首先定义了一个Person结构体,它有三个字段:NameAgeAddress。然后,我们定义了一个JSON字符串jsonStr,其中包含了一个嵌套的address属性。

我们使用json.Unmarshal()函数将JSON字符串解析为一个map[string]interface{}类型的变量data。然后,我们可以使用data的键值对来构建Person结构体。

需要注意的是,由于json.Unmarshal()函数将所有数字解析为float64类型,我们需要使用类型断言将其转换为相应的类型。同时,如果JSON字符串中的键不存在或类型不匹配,会导致程序运行时错误,因此需要进行错误检查。

最后,我们打印输出person结构体的值,可以看到JSON字符串已成功加载到结构体中

golang 如何将不固定层级的被jsonencode的字符串加载到结构体

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

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