unmarshall анонимное поле json для "именованного" поля - PullRequest
0 голосов
/ 26 марта 2019

Скажите, у меня есть следующий JSON

{
    "unknown": {
        "knownArray": [
            {"property": "somevalue", "otherproperty": false}
        ],
        "otherKnownArray": [""]
    }
}

И у меня есть следующие структуры для представления этих данных

type Model struct {
    ObjectName string
    KnownArray []KnownType `json:"knownArray"`
    OtherKnownArray []string `json:"otherKnownArray"`
}

type KnownType struct {
    Property string `json:"property1"`
    Otherproperty bool   `json:"otherproperty"`
}

делает

var model Model

json.Unmarshal(content, &model)

К сожалению, не десериализует json.

Как правильно десериализовать мою модель?
Как десериализовать json, чтобы ObjectName = "unknown"?

Я не совсем понимаю внутренности кодировки / json, когда дело доходит до анонимных полей json.

Я также пытался обернуть Model в третью «внешнюю» модель, но все еще не работает с анонимным полем json.

1 Ответ

2 голосов
/ 26 марта 2019

может использовать map [string] Model для кодирования. https://play.golang.org/p/QWXQZFjBgRB

package main

import (
    "fmt"
    "encoding/json"
)

type Model struct {
    ObjectName string
    KnownArray []KnownType `json:"knownArray"`
    OtherKnownArray []string `json:"otherKnownArray"`
}

type KnownType struct {
    Property string `json:"property"`
    Otherproperty bool   `json:"otherproperty"`
}

func main() {
        jsonstring := `{
            "unknown": {
                "knownArray": [
                        {"property": "somevalue", "otherproperty": false}
                ],
                "otherKnownArray": [""]
            }
    }`
    a := make(map[string]Model)
    json.Unmarshal([]byte(jsonstring), &a)
    var m Model
    for k, v := range(a) {
        m = v
        m.ObjectName = k
        break
    }
    fmt.Println(m.ObjectName, m.KnownArray, m.OtherKnownArray)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...