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

Примечание: myjsonstruct хранится и читается из базы данных.Жесткое кодирование для ясности

myjsonstruct := `{"fldA":"", "fldB":"", "fldC":""}`

targetJsonString := `{"fldA":"valueA","fldB":"valueB","fldC":"valueC","fldOther":"valueOther"}`

Теперь я хочу разархивировать targetJsonString в myjsonstruct, чтобы заполнить соответствующие поля в myjsonstruct.

Обратите внимание: myjsonstruct является «строкой» и не может быть запрограммирован в коде.Я не знаю эту структуру во время кодирования.во время выполнения он будет читаться как строка, возможно, из базы данных.

Спасибо!

1 Ответ

0 голосов
/ 16 октября 2018

Попробуйте:

package main

import (
    "encoding/json"
    "fmt"
)

type myjsonstruct struct {
    FldA string `json:"fldA"`
    FldB string `json:"fldB"`
    FldC string `json:"fldC"`
}

func main() {
    targetJsonString := `{"fldA":"valueA","fldA":"valueB","fldA":"valueC","fldOther":"valueOther"}`

    res := &myjsonstruct{}
    if err := json.Unmarshal([]byte(targetJsonString), res); err != nil {
        panic(err)
    }

    myjsonstructBytes, err := json.Marshal(res)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(myjsonstructBytes))
}

Будет напечатано: {"fldA":"valueC","fldB":"","fldC":""}

На игровой площадке: https://play.golang.org/p/qUkGAmvsmAD

(!) Также обратите внимание, что поля в myjsonstruct должен быть публичным (начинаться с заглавной буквы), в противном случае unmarshaller не сможет получить доступ к этим полям.

...