Как разобрать структуру массива JSON в Голанге - PullRequest
0 голосов
/ 29 ноября 2018

я использую следующий код без успеха для анализа значения 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)
}

Идея состоит в том, чтобы получить значение в качестве ключа и распечатать егокак функция, которая получает строковый параметр = "creation_at" и печатает его.

Ответы [ 4 ]

0 голосов
/ 20 декабря 2018

Ваш ввод:

[  
   {  
      "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-to-Go , если вы не знаете, как преобразовать объект JSON в структуру - это довольнополезно.Ура!

0 голосов
/ 29 ноября 2018

Вы демаршируете массив на карту.Это явно не сработает.вам нужно 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)
}
0 голосов
/ 29 ноября 2018

Вы должны создать такую ​​структуру.

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)
    }
}
0 голосов
/ 29 ноября 2018
var val []struct{
    CreatedAt string `json:"created_at"`
}{}

if err := json.Unmarshal([]byte(input), &val); err != nil {
    panic(err)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...