Как я могу создать вложенную структуру json, включая тип байта []? - PullRequest
0 голосов
/ 18 октября 2019

В настоящее время я пытаюсь создать следующий вложенный json, включая список байтового массива (), закодированного в json и DER сертификата с использованием golang:

{
"webhooks":
    [{
    "clientConfig":{
         "caBundle":"<derData []bytes>"
    },
    "name":"sth_name"
    }]
}

Из-за <certDerBytes[]> мне нужноиспользовать структуру, но я не знаю, как ее инициализировать. Я создал структуру до сих пор:

type jsonstruct struct {
    Webhooks []struct {
        ClientConfig struct {
            CaBundle string `json:"caBundle"`
        } `json:"clientConfig"`
        Name string `json:"name"`
    } `json:"webhooks"`
}

Но не могу создать экземпляр структуры, которую мне нужно маршалировать в json.

Я пытался использовать строковые литералы, много способов его инициализациикак и для обычной не вложенной структуры.

Я также разделил структуры, т.е. type jsonstruct.. type webhooks ... и т. Д., Но это ошибка.

Я также инициализировал структуру изнутри, но тоже не сработал.

Мне нужно создать

1 Ответ

0 голосов
/ 18 октября 2019

Лучше всего, вероятно, использовать base64 в самом байтовом массиве и включить его в качестве полезной нагрузки поля структуры.

Один кусок ниты, лично мне не нравятся вложенные именованные структуры,Разбив их, вы получаете гораздо больше гибкости в своем коде.

Например:

type jsonstruct struct {
    Webhooks []Webhook `json:"webhooks"`
}

type Webhook struct {
    ClientConfig ClientConfig `json:"clientConfig"`
    Name string `json:"name"`
}

type ClientConfig struct {
    CaBundle string `json:"caBundle"`
}

func (cc ClientConfig) ToBytes() []byte {
    return []byte(base64.StdEncoding.DecodeString(cc.CaBundle))
}

func (cc ClientConfig) FromBytes(cert []byte) {
    cc.CaBundle = base64.StdEncoding.EncodeToString(cert)
}
...