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

У меня есть следующий JSON-ответ от API Salt-Stack:

{
    "return": [{
        "<UUID1>": true,
        "<UUID2>": "Minion did not return. [No response]",
        "<UUID3>": true,
        "<UUID4>": false
    }]
}

Обычно я использую структуру карты, чтобы демонтировать ее в Go:

type getMinionsStatusResponse struct {
    Returns     []map[string]bool `json:"return"`
}

Но из-заВо второй строке, где вместо логического значения возвращается ответ об ошибке (в строковом формате), я получил следующую ошибку: json: cannot unmarshal string into Go value of type bool

Интересно, как я могу маршалировать этот формат JSON в Golang, используя пакет encoding/json

1 Ответ

0 голосов
/ 25 апреля 2018

Для демаршалинга динамического json, где вывод отличается, используйте интерфейс, чтобы демаршировать то же самое.Он разрушит весь JSON, поскольку он структурирован внутри любого типа.

package main

import (
    "fmt"
    "encoding/json"
)

func main() {
    jsonbytes := []byte(`{
        "return": [{
            "<UUID1>": true,
            "<UUID2>": "Minion did not return. [No response]",
            "<UUID3>": true,
            "<UUID4>": false
            }]
    }`)
    var v interface{}
    if err := json.Unmarshal(jsonbytes, &v); err != nil{
        fmt.Println(err)
    }
    fmt.Println(v)
}

Детская площадка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...