嵌套的Json数组构造golang中的un-marshalling

问题描述:

我主要看着在golang中取消编组下面的JSON数组。嵌套的Json数组构造golang中的un-marshalling

{ 
"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{}) 

在这里的任何帮助将非常感激。请注意,我没有看到定义相应的结构并进行复制。

谢谢!

+1

你能在“不能够扩展到顺利拿到了我想”?你有什么具体问题? – Adrian

+0

看看这个问题/答案:https://*.com/questions/20154606/marshall-and-unmarshall-json-content-in-golang?rq=1 –

+0

[Marshall and UnMarshall JSON Content in GoLang](https://*.com/questions/20154606/marshall-and-unmarshall-json-content-in-golang) –

我认为这个solution可以给你一个提示,你想要做的是从这个JSON中提取key,而不需要任何额外的type创建。

+0

谢谢!但是如果我只想要“记录”下的第一条记录的“关键”的值? – Rakshith

+0

@Rakshith而不是做'for _,l3Elem:= range l3 {...'你只需要 'var values map [string] interface {}; err:= json.Unmarshal(l3 [0],&values)' –

我让你一个例子: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) 

} 

在您的例子要删除“[关键]”当您访问svmRecordsMap