在Golang中访问类型为map [string] interface {}的嵌套地图

Sreejith Ramakrishnan:

因此,我正在尝试解析JSON响应。它可以是多个层次。这就是我所做的:

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

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

可以说响应如下:

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

要访问key foo,我看到一个游乐场正在这样做:

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

在这里,.()表示法是什么?这样对吗?

icza:

该符号x.(T)称为类型断言

对于x接口类型和类型T的表达式,主表达式x.(T)断言x不是,nil并且其中存储的值x是类型T

你的例子:

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

这意味着results与key关联地图的值"args"是类型map[string]interface{}(另一个包含stringkey和任何值的地图)。并且您想要访问与key关联的该映射的元素"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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将mgo与转换为map [string] interface {}的嵌套文档一起使用。如何遍历地图?

添加嵌套的地图值,例如Map <String,Map <String,String >>

在Golang中将属性添加到嵌套map [string] interface {}

类型化的嵌套映射map [string] interface {}返回“类型interface {}不支持索引”

golang为类型为map [string] interface {}的对象设置新值

将嵌套的火花行转换为嵌套的地图Map [String,Any](反之亦然)

如何使用 Stream API 创建嵌套地图 Map<String, Map<String,String>>

Golang的嵌套地图

嵌套地图golang的结构

从String到map [string] interface {} golang

在gRPC协议缓冲区golang中创建Map [string] interface {}类型的变量

Go中的嵌套地图

使用map [string] interface {}:

使用map [string] int作为map [interface {}] interface {}类型的参数

在Go中为map [string] interface {}创建方法

map [string] interface {}和interface {}之间的区别

Python 3中的嵌套地图

查询Java中的嵌套地图

Terraform 中的嵌套地图数据

在Elixir中更新嵌套地图

将map [interface {}] interface {}转换为map [string] string

在golang中动态创建嵌套地图

无法从[[] interface {}`断言类型[[] string`

正确使用map [string] interface {}?

读取map [string] interface {}中的数据

在Golang中将两种或多种[] map [string] interface {}类型合并为一种

在具有interface {}值的地图上实现String()

如何将map [string] interface {}中的不同值转换为string类型

kubectl 返回不能将字符串解组为 map[string]interface {} 类型的 Go 值