gpt4 book ai didi

json - 在 Golang 中访问 map[string]interface{} 类型的嵌套映射

转载 作者:IT老高 更新时间:2023-10-28 13:07:02 25 4
gpt4 key购买 nike

所以我正在尝试解析 JSON 响应。它可以是多个级别的深度。这就是我所做的:

var result map[string]interface{}
json.Unmarshal(apiResponse, &result)

首先,这是正确的做法吗?

假设响应如下:

{
"args": {
"foo": "bar"
}
}

要访问 key foo,我看到了 playground这样做:

result["args"].(map[string]interface{})["foo"]

这里,.() 符号是什么?这是正确的吗?

最佳答案

符号 x.(T)被称为 Type Assertion .

For an expression x of interface type and a type T, the primary expression x.(T) asserts that x is not nil and that the value stored in x is of type T.

你的例子:

result["args"].(map[string]interface{})["foo"]

表示你的results的值与键 "args" 关联的映射是 map[string]interface{} 类型(另一个带有 string 键和任何值的映射)。并且您想访问与键 "foo" 关联的映射的元素.

如果您知道输入 JSON 格式,那么是的,您必须使用通用 map[string]interface{}类型来处理它。如果您知道输入 JSON 的确切结构,您可以创建一个 struct匹配预期的字段,这样做您可以将 JSON 文本解码为您的自定义值 struct输入,例如:

type Point struct {
Name string
X, Y int
}

func main() {
in := `{"Name":"center","X":2,"Y":3}`

pt := Point{}
json.Unmarshal([]byte(in), &pt)

fmt.Printf("Result: %+v", pt)
}

输出:

Result: {Name:center X:2 Y:3}

Go Playground 上试用.

为您的输入建模

您当前的 JSON 输入可以用这种类型建模:

type Data struct {
Args struct {
Foo string
}
}

访问 Foo (在 Go Playground) 上试一试:

d := Data{}
json.Unmarshal([]byte(in), &d)
fmt.Println("Foo:", d.Args.Foo)

关于json - 在 Golang 中访问 map[string]interface{} 类型的嵌套映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28806951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com