如何解析json数组结构

5 go

我正在使用以下代码未能成功解析 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)
}
Run Code Online (Sandbox Code Playgroud)

这个想法是获取值作为键并打印它,就像一个获取字符串参数=“created_at”并打印它的函数。

sol*_*olo 10

您的输入是:

[  
   {  
      "created_at":"Thu May 31 00:00:01 +0000 2012"
   },
   {  
      "created_at":"Thu May 31 00:00:01 +0000 2012"
   }
]
Run Code Online (Sandbox Code Playgroud)

你可以把它变成一个像这样的结构:

type MyArray []struct {
    CreatedAt string `json:"created_at"`
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以读取 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)
    }
}
Run Code Online (Sandbox Code Playgroud)

将来,如果您不确定如何将 JSON 对象转换为结构体,您可以咨询JSON-to- Go——它非常有用。干杯!


Fli*_*mzy 7

您正在将数组解组到地图。这显然行不通。你需要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)
}
Run Code Online (Sandbox Code Playgroud)