Разобрать и взять n-й элемент из массива json - PullRequest
0 голосов
/ 31 января 2020

Я хотел разобрать JSON и взять второе имя "Андрей Борисенко" из массива людей,

JSON:

text = `{"people": [{"craft": "ISS", "name": "Sergey Rizhikov"}, {"craft": "ISS", "name": "Andrey Borisenko"}, {"craft": "ISS", "name": "Shane Kimbrough"}, {"craft": "ISS", "name": "Oleg Novitskiy"}, {"craft": "ISS", "name": "Thomas Pesquet"}, {"craft": "ISS", "name": "Peggy Whitson"}], "message": "success", "number": 6}`

Мой код пока:

package main

import (
    "fmt"
    "encoding/json"
)


type people struct {
    NAME string `json:"craft"`
}

func main() {
    const text = `{"people": [{"craft": "ISS", "name": "Sergey Rizhikov"}, {"craft": "ISS", "name": "Andrey Borisenko"}, {"craft": "ISS", "name": "Shane Kimbrough"}, {"craft": "ISS", "name": "Oleg Novitskiy"}, {"craft": "ISS", "name": "Thomas Pesquet"}, {"craft": "ISS", "name": "Peggy Whitson"}], "message": "success", "number": 6}`
        textBytes := []byte(text)

    people1 := people{}
    err := json.Unmarshal(textBytes, &people1)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(people1.NAME.[1])
}

1 Ответ

2 голосов
/ 31 января 2020

Ваше назначение с json.Unmarshal и ваша структура не подходит для того, что вы хотите сделать.

Ваша структура должна выглядеть следующим образом:

type myStruct struct {
    Peoples []struct {
        Craft string `json:"craft"`
        Name string `json:"name"`
    } `json:"people"`
}

Что даст вам массив человек (Peoples)

    for _, eachOne := range peopleStruct.Peoples {
       fmt.Println(eachOne.Name) //eachOne.Name == name of you guys
       fmt.Println(eachOne.Craft) //eachOne.Craft == craft of you guys
    }

Для Андрея: fmt.Println(peopleStruct.Peoples[1].Name)

Для живой игровой площадки

...