golang,如何在简单json中解码json数组的项目?
golang, How to decode json array's items in simplejson?
传入的字符串是:
{"status_list":[
{"m_id":70,"m_status":"OK","m_status_code":200,"reported":false},
{"m_id":71,"m_status":"Send Message Over Time","m_status_code":800,"reported":false},
{"m_id":72,"m_status":"OK","m_status_code":200,"reported":false},
{"m_id":73,"m_status":"OK","m_status_code":200,"reported":false}
]
}
如何获取最后一个状态元素的 m_status
字段?
我使用的方式是
import github.com/bitly/go-simplejson"
....
jsonRequest, _ := simplejson.NewJson([]byte(incommingString))
mArray := jsonRequest.Get("status_list").MustArray()
mItem := mArray[3]
fmt.printf("mItem: %")
m3StatusCode := mItem["m_status_code"] //<---<< Can't compile
我得到了:
invalid operation: mItem["m_status_code"] (type interface {} does not support indexing)
如果我删除最后一行代码。我可以将 mItem
打印为
mItem: : map[m_id:73 m_status:OK m_status_code:200 reported:%!s(bool=false)]
问题:
如何获取 m_status_code
值?
你必须先做一个type assertion。
m, ok := mItem.(map[string]interface{})
if(!ok){
fmt.Println("Invalide data")
}
fmt.Println(m["m_status_code"])
这是因为 mItem
实际上不是地图。它是一个 interface{}
。 simplejson 的 MustArray returns 一个 []interface{}
。
因此您必须断言存储在 mItem
中的值是您可以在其上使用索引 m_status_code
的类型。
// 1. convert to array
array, err := json.Get("status_list").Array()
if err != nil {
panic(err)
}
// 2. iterate
for _, item := range array {
// 3. assertion
if m, ok := item.(map[string]interface{}); ok {
fmt.Println(m["m_status_code"])
}
}
传入的字符串是:
{"status_list":[
{"m_id":70,"m_status":"OK","m_status_code":200,"reported":false},
{"m_id":71,"m_status":"Send Message Over Time","m_status_code":800,"reported":false},
{"m_id":72,"m_status":"OK","m_status_code":200,"reported":false},
{"m_id":73,"m_status":"OK","m_status_code":200,"reported":false}
]
}
如何获取最后一个状态元素的 m_status
字段?
我使用的方式是
import github.com/bitly/go-simplejson"
....
jsonRequest, _ := simplejson.NewJson([]byte(incommingString))
mArray := jsonRequest.Get("status_list").MustArray()
mItem := mArray[3]
fmt.printf("mItem: %")
m3StatusCode := mItem["m_status_code"] //<---<< Can't compile
我得到了:
invalid operation: mItem["m_status_code"] (type interface {} does not support indexing)
如果我删除最后一行代码。我可以将 mItem
打印为
mItem: : map[m_id:73 m_status:OK m_status_code:200 reported:%!s(bool=false)]
问题:
如何获取 m_status_code
值?
你必须先做一个type assertion。
m, ok := mItem.(map[string]interface{})
if(!ok){
fmt.Println("Invalide data")
}
fmt.Println(m["m_status_code"])
这是因为 mItem
实际上不是地图。它是一个 interface{}
。 simplejson 的 MustArray returns 一个 []interface{}
。
因此您必须断言存储在 mItem
中的值是您可以在其上使用索引 m_status_code
的类型。
// 1. convert to array
array, err := json.Get("status_list").Array()
if err != nil {
panic(err)
}
// 2. iterate
for _, item := range array {
// 3. assertion
if m, ok := item.(map[string]interface{}); ok {
fmt.Println(m["m_status_code"])
}
}