Golang json unmarshall - PullRequest
       0

Golang json unmarshall

0 голосов
/ 24 февраля 2020

Я новичок в Go. У меня json вот так:

{
  "3415": {
    "age": 25,
    "name": "Tommy"
  },
  "3414": {
    "age": 21,
    "name": "Billy"
  }
}

Я хочу разобрать его на структуру:

type People struct {
    Id map[string]PeopleDetails
}

type PeopleDetails struct {
    Age int `json:"age"`
    Name string `json:"name"`
}

Но пока я ее запускаю, я вижу, что структура возвращает значение nil. Я читал некоторые учебные пособия, но большинство из них имеют предопределенные ключи, как вы видите здесь «id», например, 3415 отличается для каждого нового json.

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Когда вам приходится иметь дело с ключом «dynamici c» json, ответом является использование карты структуры.

Вы можете использовать следующий код:

package main

import (
    "encoding/json"
    "fmt"
)

// Use the struct pointed by @Adirio
type People map[string]PeopleDetails
type PeopleDetails struct {
    Age  int    `json:"age"`
    Name string `json:"name"`
}

var data string = `{"3415":{"age":25,"name":"Tommy"},"3414":{"age":21,"name":"Billy"}}`

func main() {
    var p People
    if err := json.Unmarshal([]byte(data), &p); err != nil {
        fmt.Println(err)
    }
    fmt.Println(p)
}

GoPlayground: https://play.golang.org/p/kVzNV56NcTd

0 голосов
/ 24 февраля 2020

Попробуйте использовать следующие типы:

type People map[string]PeopleDetails

type PeopleDetails struct {
    Age int `json:"age"`
    Name string `json:"name"`
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...