嵌套的Json Array在golang中构造非编组

时间:2017-07-28 16:16:19

标签: json go

我主要是在golang中解组下面的JSON数组。

{
 "status":{"code":"SUCCESS"},
 "result": {
              "total_records":1,
              "records": [{
                            "last_modified_timestamp":1501209015807,
                            "dns_servers":null,
                            "is_secured":false,
                            "nis_domains":null,
                            "storage_platform_resource_key":"e1ee32f9-6576-11e7-82a8-00a098697714",
                            "name":"vs1",
                            "nis_servers":null,
                            "created_timestamp":1501208944094,
                            "dns_domains":null,
                            "key":"f59dacca-7379-11e7-82a8-00a098697714"
                         }]
            }
 }

我想在这里提取“关键”字段。试过以下语法,但无法成功得到我想要的。

var dat map[string]interface{}

// Unmarshall the JSON body
if err := json.Unmarshal(body, &dat); err != nil {
    fmt.Println(err)
}
svmRecordsMap := dat["result"].(map[string]interface{})["records"]
fmt.Printf("%+v", svmRecordsMap)

result := (svmRecordsMap["key"].([]interface{})[0]).(map[string]interface{})

非常感谢任何帮助。请注意,我不是在考虑定义相应的结构并制作副本。

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为这个solution可以为您提供一些提示,以便在不创建任何其他key的情况下从此JSON中提取type

答案 1 :(得分:0)

我举个例子:https://play.golang.org/p/tReMMtGA2V

package main

import (
    "encoding/json"
    "fmt"
)

func main() {

    txt := `{
 "status":{"code":"SUCCESS"},
 "result": {
              "total_records":1,
              "records": [{
                            "last_modified_timestamp":1501209015807,
                            "dns_servers":null,
                            "is_secured":false,
                            "nis_domains":null,
                            "storage_platform_resource_key":"e1ee32f9-6576-11e7-82a8-00a098697714",
                            "name":"vs1",
                            "nis_servers":null,
                            "created_timestamp":1501208944094,
                            "dns_domains":null,
                            "key":"f59dacca-7379-11e7-82a8-00a098697714"
                         }]
            }
 }`

    var dat map[string]interface{}

    if err := json.Unmarshal([]byte(txt), &dat); err != nil {
        fmt.Println(err)
    }
    svmRecordsMap := dat["result"].(map[string]interface{})["records"]
    fmt.Printf("%+v", svmRecordsMap)

    result := (svmRecordsMap.([]interface{})[0]).(map[string]interface{})

    fmt.Println(result)

}

在您的示例中,必须删除" [key]"当你访问svmRecordsMap