当前位置: 首页 > 面试题库 >

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

须景胜
2023-03-14
问题内容

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

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

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

可以说响应如下:

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

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

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

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


问题答案:

该符号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的确切结构,则可以创建一个a
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)


 类似资料:
  • 问题内容: 我在使用类型化嵌套地图时遇到一个非常奇怪的问题。 我究竟做错了什么?为什么仅由于地图嵌套在地图中而突然失败? 问题答案: 让我们来看一下: 定义时,可以为给定的字符串索引设置所需的任何类型(满足 空接口 协定的任何类型,也可以是任何类型)。 但是,当您尝试访问某些键时,您不会得到一些int,字符串或任何自定义结构,但会得到一个 为了将其视为字符串,您可以进行类型断言或类型切换。 在这里

  • 问题内容: 从来源来看,我无法影响我在地图中获得的数据,该地图以表示。 我需要处理所包含的数据,最好是(其中的数据非常适合该处理)。 我还需要从数据中生成键列表,因为这些键是事先未知的。 我可以在网上找到的大多数类似问题或多或少都说这是不可能的,但是如果我的地图是,则表明数据在那里,可读性为。 我该怎么办fmt.Println可以做什么? 问题答案: 处理未知接口的一种安全方法,只需使用fmt.S

  • 问题内容: 无法编码 http://play.golang.org/p/Si4hd8I0JE 可以在gob中编码吗?我可以用JSON编码 问题答案: 加 http://play.golang.org/p/Dd3IzJgl0A

  • 问题内容: 它运行。 它也可以运行。 它再次运行! 但是失败了!? Go中的嵌套地图有问题吗?还是对嵌套地图没有多括号支持? 问题答案: 地图类型的零值为。尚未初始化。您无法在地图中存储值,这是运行时的恐慌。 在上一个示例中,您初始化了(外部)映射,但是它没有条目。当您像那样对它进行索引时,由于尚无键输入,因此对其进行索引将返回用于地图的值类型的零值。因此,尝试分配给运行时恐慌。 您必须先初始化地

  • 问题内容: 团队,编程新手。如下图所示对Json进行编组后,我有可用数据,该数据具有嵌套的Key值。我可以访问的固定键值,如何访问嵌套键值。拆封后,这是下面显示的字节切片数据—> 我可以使用以下代码访问平面键值 这是完整的功能 问题答案: 注意:这可能不适用于您的JSON结构。我根据您的问题推断出它将是什么,但是如果没有实际的结构,我无法保证它可以在不做任何修改的情况下工作。 如果要在映射中访问它

  • 问题内容: 我从“ reflect”包中的函数调用获取此返回值: 。 想知道我是否可以在返回值内访问实际地图,如果可以,怎么办? 编辑: 因此,这是我在进行返回Value对象的调用的地方。它返回`[< map[string]string Value ][< map[string]string Value >]`为常规地图。 问题答案: 使用方法可以将大多数反射对象转换回一个值。 获取此值后,可以将