По этой теме есть несколько вопросов, но, похоже, ни один из них не касается моего случая, поэтому я создаю новый.
У меня есть JSON вроде следующего:
{"foo":{ "bar": "1", "baz": "2" }, "more": "text"}
Есть ли способ демаршалировать свойство вложенной панели и назначить его непосредственно свойству структуры без создания вложенной структуры?
Решение, которое я сейчас принимаю, следующее:
type Foo struct {
More String `json:"more"`
Foo struct {
Bar string `json:"bar"`
Baz string `json:"baz"`
} `json:"foo"`
// FooBar string `json:"foo.bar"`
}
Это упрощенная версия, не обращайте внимания на многословие. Как видите, я хотел бы иметь возможность анализировать и присваивать значение
// FooBar string `json:"foo.bar"`
Я видел людей, пользующихся картой, но это не мой случай. Я в основном не забочусь о содержимом foo
(который является большим объектом), за исключением нескольких конкретных элементов.
Каков правильный подход в этом случае? Я не ищу странных хаков, поэтому, если это правильный путь, меня это устраивает.
Как и то, что упомянул Волкер, вложенные структуры - это лучший вариант. Но если вам действительно не нужны вложенные структуры, вы можете переопределить функцию UnmarshalJSON.
https://play.golang.org/p/dqn5UdqFfJt
Не обращайте внимания на то, что я не возвращаю правильную ошибку. Я оставил это для простоты.
ОБНОВЛЕНИЕ: правильное получение значения «больше».
источник
Это пример того, как демаршалировать ответы JSON от прокси-сервера sbserver API Safebrowsing v4: https://play.golang.org/p/4rGB5da0Lt
источник
Да. С gjson все, что вам нужно сделать, это:
bar := gjson.Get(json, "foo.bar")
bar
может быть структурным свойством, если хотите. Также нет карт.источник
fastjson.GetString(json, "foo", "bar")
А как насчет анонимных полей? Я не уверен, что это будет «вложенная структура», но это чище, чем объявление вложенной структуры. Что, если вы хотите повторно использовать вложенный элемент в другом месте?
источник
Назначьте значения вложенной
json
структуре, пока не узнаете базовый тип ключей json: -источник
Я работал над чем-то вроде этого. Но работает только со структурами, созданными из прото. https://github.com/flowup-labs/grpc-utils
в вашем прото
Тогда ваш результат будет
источник
Комбинирование карты и структуры позволяет демаршалировать вложенные объекты JSON, где ключ является динамическим. => карта [строка]
Например: stock.json
Приложение Go
Динамический ключ в хэше - это дескриптор строки, а вложенный объект представлен структурой.
источник