如何在GO中访问JSON的字段

Nig*_*hee 4 printing json go

大家好,我想看看在go中从http.get请求访问json对象字段的正确方法是什么。

我首先执行http.get调用获取JSON,然后将其打印(有效),但是有没有办法仅访问字段?

例如:

response, err:= http.Get("URL")
//Error checking is done between
contents, err:=ioutil.Readall(response.Body)

//Now at this point I have a json that looks like
{"id": "someID", 
"name": "someName", 
"test": [{"Name":"Test1", 
          "Result": "Success"},
         {"Name":"Test2", 
          "Result": "Success"},
         {...},
]}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法只能打印Json的“测试”?访问该字段的正确方法是什么?

小智 9

与上一个答案相同,使用 encoding/json 包解组数据。但是如果你不想指定结构,你可以使用 map[string]interface/bson.M{} 来接收数据,并获取字段,然后转换为你想要的类型。

m := make(map[string]interface{})
err := json.Unmarshal(data, &m)
if err != nil {
    log.Fatal(err)
}
fmt.Println(m["id"])
Run Code Online (Sandbox Code Playgroud)


sfa*_*ult 6

使用encoding/json包将数据解组到结构中,如下所示。

type Result struct {
    ID   string        `json:"id"`
    Name string        `json:"name"`
    Test []interface{} `json:"test"`
}

var result Result
json.Unmarshal(contents, &result)
fmt.Println(result.Test)
Run Code Online (Sandbox Code Playgroud)

您还可以解析Test为特定的结构。

  • 您可以定义一个名为Test的结构,并在Result结构中使用Test [] Test代替Test [] interface {} (2认同)