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

如何在Golang中访问嵌套的Json键值

姜永贞
2023-03-14
问题内容

团队,编程新手。如下图所示对Json进行编组后,我有可用数据,该数据具有嵌套的Key值。我可以访问的固定键值,如何访问嵌套键值。拆封后,这是下面显示的字节切片数据—>

tables:[map[name:basic__snatpool_members] map[name:net__snatpool_members] map[name:optimizations__hosts] map[columnNames:[name] name:pool__hosts rows:[map[row:[ry.hj.com]]]] traffic_group:/Common/traffic-group-1

我可以使用以下代码访问平面键值

p.TrafficGroup = m[“traffic_group”].(string)

这是完整的功能

func dataToIapp(name string, d *schema.ResourceData) bigip.Iapp {
        var p bigip.Iapp

        var obj interface{}

        jsonblob := []byte(d.Get("jsonfile").(string))
        err := json.Unmarshal(jsonblob, &obj)
        if err != nil {
                fmt.Println("error", err)
        }
        m := obj.(map[string]interface{}) // Important: to access property
        p.Name = m[“name”].(string)
        p.Partition = m[“partition”].(string)

        p.InheritedDevicegroup = m[“inherited_devicegroup”].(string)

}

问题答案:

注意:这可能不适用于您的JSON结构。我根据您的问题推断出它将是什么,但是如果没有实际的结构,我无法保证它可以在不做任何修改的情况下工作。

如果要在映射中访问它们,则需要断言从第一个映射拉出的接口实际上是一个映射。因此,您需要执行以下操作:

tmp := m["tables"]
tables, ok := tmp.(map[string]string)
if !ok {
    //error handling here
}

r.Name = tables["name"].(string)

但是map[string]interface{},为什么不创建与JSON输出匹配的结构,而不是将未编组的JSON作为来访问?

type JSONRoot struct {
    Name string `json:"name"`
    Partition string `json:"partition"`
    InheritedDevicegroup string `json:"inherited_devicegroup"`
    Tables map[string]string `json:"tables"` //Ideally, this would be a map of structs
}

然后在您的代码中:

func dataToIapp(name string, d *schema.ResourceData) bigip.Iapp {
    var p bigip.Iapp

    var obj &JSONRoot{}

    jsonblob := []byte(d.Get("jsonfile").(string))
    err := json.Unmarshal(jsonblob, &obj)
    if err != nil {
            fmt.Println("error", err)
    }

    p.Name = obj.Name
    p.Partition = obj.Partition

    p.InheritedDevicegroup = obj.InheritedDevicegroup

    p.Name = obj.Tables["name"]
}


 类似资料:
  • {“_index”:“pie”,“_type”:“flare”,“_id”:“2”,“_version”:1,“_score”:1,“_source”:{“id”:2,“父级”:1,“data”:{“memory”:50}}}

  • 问题内容: 我正在用Go编写一个websocket客户端。我正在从服务器接收以下JSON: 我正在尝试访问该参数,但无法掌握如何深入了解接口类型: 显然是错误的,因为这种表示法是不正确的: 我只是找不到一种方法来挖掘地图以获取深层嵌套的键和值。 一旦可以克服动态值,我便想声明这些消息。我将如何编写类型结构来表示这种复杂的数据结构? 问题答案: 您解码成的部分将与该字段的类型匹配。因此,在这种情况下

  • 问题内容: 假设我有json数据,例如 现在我正在从该json数据访问字段,例如: 如何以最有效的方式从给定的json数据访问第三个字段()? 不起作用 一种可能是我使用for循环构造字符串,然后进行eval评估,但是有没有有效的方法呢? 问题答案: 老实说,我无法理解您的问题。JSON已经结构化了,为什么需要更改结构? 在您的情况下,我将按以下方式访问它: 如果碰巧希望 遍历 数据,则需要: 更

  • 问题内容: 我仍在Go的学习过程中,但是在涉及JSON响应数组时遇到了麻烦。每当我尝试访问“对象”数组的嵌套元素时,Go都会抛出异常(类型接口{}不支持索引) 出了什么问题?将来如何避免犯此错误? http://play.golang.org/p/duW-meEABJ 编辑:固定链接 问题答案: 如错误所述,接口变量不支持索引。您将需要使用类型断言来转换为基础类型。 当解码为变量时,JSON模块将

  • 问题内容: 我有一个Java的HashMap,其内容(大家可能都知道)可以由 如果在另一个HashMap中有一个HashMap,即嵌套的HashMap,我将如何访问内容?我可以这样做吗,内联: 谢谢。 问题答案: 您可以像假设的那样进行操作。但是您的HashMap必须模板化: 否则,从第一张地图检索第二张地图后,您必须进行强制转换。

  • 问题内容: 我正在尝试使用angular.js,hammer.js和topcoat制作和移动webapp。 我在显示像这样的Json文件中的数据时遇到了一些麻烦: 我的js文件是这样的: 我的HTML文件是这样的: 我想显示所有专辑,并且如果我的用户选择特定的艺术家,我想过滤那些专辑。 这里的问题是如何在此嵌套json上进行选择。顺便说一句,artist.name显示正确。 第二个问题是,如何过滤