英文:
How to parse JSON Array of JSON Hashes in GOLANG
问题
你可以使用循环来遍历数组中的每个元素,并获取所需的值。在你的代码中,变量s
是一个包含所有数组的切片,每个数组都代表一个Client
对象。你可以使用循环来遍历s
,并访问每个Client
对象的Name
属性来获取名称值。
以下是一个示例代码片段,展示了如何使用循环获取所有数组中的名称值:
for _, client := range *s {
name := client.Name
fmt.Println(name)
}
在这个示例中,我们使用range
关键字来遍历s
切片中的每个元素,并将每个元素赋值给变量client
。然后,我们可以通过client.Name
来访问每个Client
对象的名称值,并进行相应的操作。
这是一种常见的方法来处理包含多个对象的数组,并获取特定属性的值。希望对你有帮助!
英文:
i have the following json array of json hashes :
[
{
"name": "XXXX",
"address": "XXXX",
"keepalive": {
"thresholds": {
"warning": 30,
"critical": 100
},
"handlers": [
"XXXXX"
],
"refresh": 180
},
"subscriptions": [
"XXXX",
"XXXX",
"XXXX"
],
"version": "0.17.1",
"timestamp": 1486413490
},
{...},
{...},
...
]
And am parsing the array as the following :
type Client struct {
Name string `json:"name"`
Address string `json:"address"`
PublicDNS string `json:"publicDNS"`
keepalive [] string `json:"keepalive"`
Subscriptions [] string `json:"subscriptions"`
Version string `json:"version"`
Timestamp int64 `json:"timestamp"`
}
type ClientResponse []Client
func getClients(body []byte) (*ClientResponse, error) {
var s = new(ClientResponse)
err := json.Unmarshal(body, &s)
if(err != nil){
fmt.Println("whoops:", err)
}
return s, err
}
func main() {
res,err := http.Get("http://xxxxx:4567/clients")
if err != nil{
panic(err.Error())
}
body,err := ioutil.ReadAll(res.Body)
if err != nil{
panic(err.Error())
}
s, err := getClients([]byte(body))
fmt.Println(s)
}
Problem : variable s , contain all arrays . so how can i get lets say name value for all arrays ? should i do for loop and get values i need ? is this the best approach ?
答案1
得分: 1
你需要对它们进行循环。
names := make([]string, len(*s))
for i := range *s {
names[i] = (*s)[i].Name
}
顺便说一下,你的反序列化结构是不正确的。keepalive
没有被导出,所以它不会被反序列化,即使它被导出了,它在 JSON 中被定义为一个带有 thresholds
、handlers
和 refresh
字段的对象,而不是一个字符串切片。
英文:
You'll have to loop over them.
names := make([]string, len(*s))
for i := range *s {
names[i] = (*s)[i].Name
}
Incidentally, your structure for unmarshalling is incorrect. keepalive
isn't exported, so it won't be unmarshalled, and even if it were, it's defined as a slice of strings, while the keepalive
field in the JSON is an object with thresholds
, handlers
, and refresh
fields
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论