im使用以下代码未能成功解析json值,但解析其内部数组[]
https://play.golang.org/p/5HdWeyEtvie
package main
import (
"encoding/json"
"fmt"
)
var input = `
[
{
"created_at": "Thu May 31 00:00:01 +0000 2012"
},
{
"created_at": "Thu May 31 00:00:01 +0000 2012"
}
]
`
func main() {
var val map[string]interface{}
if err := json.Unmarshal([]byte(input), &val); err != nil {
panic(err)
}
fmt.Println(val)
}
这个想法是将值作为键并打印出来,就像获取字符串参数=“ created_at”并打印出来的函数一样。
答案 0 :(得分:1)
var val []struct{
CreatedAt string `json:"created_at"`
}{}
if err := json.Unmarshal([]byte(input), &val); err != nil {
panic(err)
}
答案 1 :(得分:1)
您正在将数组解组到地图。那显然是行不通的。您需要val
作为数组。
func main() {
var val []map[string]interface{} // <---- This must be an array to match input
if err := json.Unmarshal([]byte(input), &val); err != nil {
panic(err)
}
fmt.Println(val)
}
答案 2 :(得分:0)
您应该创建这样的结构。
type Data struct {
CreateAt time.Time `json:"create_at"`
}
func main() {
var in []Data
if err := json.Unmarshal([]byte(input), &in); err != nil{
log.Fatal(err)
}
for _, data := range in{
fmt.Println(data.CreateAt)
}
}
答案 3 :(得分:0)
您的输入是:
[
{
"created_at":"Thu May 31 00:00:01 +0000 2012"
},
{
"created_at":"Thu May 31 00:00:01 +0000 2012"
}
]
您可以将其转换为如下结构:
type MyArray []struct {
CreatedAt string `json:"created_at"`
}
现在,您可以读取JSON数据并循环遍历以获得所需的值。这是您得到的:
package main
import (
"encoding/json"
"fmt"
)
var str = `[
{
"created_at": "Thu May 31 00:00:01 +0000 2012"
},
{
"created_at": "Thu May 31 00:00:01 +0000 2013"
}
]`
type MyArray struct {
CreatedAt string `json:"created_at"`
}
func main() {
var m []MyArray
if err := json.Unmarshal([]byte(str), &m); err != nil {
panic(err)
}
for _, val := range m {
fmt.Println(val.CreatedAt)
}
}
将来,如果不确定如何将JSON对象转换为结构,可以咨询JSON-to-Go,这非常有用。干杯!