Преобразование JSON с массивом - PullRequest
0 голосов
/ 12 марта 2020

Я написал следующий код для получения массива из JSON и хочу получить что-то вроде

[{"id": "id1", "friendly": "friendly1"}, {"id": "id2", "friendly": "friendly2"}]

Но там пусто:

[{"id": "", " friendly ":" "}, {" id ":" "," friendly ":" "}]

package main

import (
    "encoding/json"
    "fmt"
)

var input = `[
            {
                "not needed": "",
                "_source": {
                    "id": "id1",
                    "friendly": "friendly1"
                }
            },
            {
                "_source": {
                    "id": "id2",
                    "friendly": "friendly2"
                }
            }]`

type source struct {
    Id string `json:"id"`
    Friendly string `json:"friendly"`
}

func main() {
    result := make([]source, 0)
    sources := []source{}

    json.Unmarshal([]byte(input), &sources)

    for _, n := range sources {
        result = append(result, n)
    }
    out, _ := json.Marshal(result)
    fmt.Println(string(out))
}

1 Ответ

1 голос
/ 12 марта 2020

Попробуйте создать другую структуру, имеющую одно поле с именем Source типа source. В моем примере ниже я назвал эту структуру outer. Ваш ввод должен быть массивом outer, а ваш результат - массивом source.

Примерно так:


import (
    "encoding/json"
    "fmt"
)

var input = `[
            {
                "not needed": "",
                "_source": {
                    "id": "id1",
                    "friendly": "friendly1"
                }
            },
            {
                "_source": {
                    "id": "id2",
                    "friendly": "friendly2"
                }
            }]`

type outer struct {
    Source source `json:"_source"`
}

type source struct {
    Id string `json:"id"`
    Friendly string `json:"friendly"`
}

func main() {
    result := make([]source, 0)
    sources := []outer{}

    json.Unmarshal([]byte(input), &sources)

    for _, n := range sources {
        result = append(result, n.Source)
    }
    out, _ := json.Marshal(result)
    fmt.Println(string(out))
}```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...