«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как демаршалировать массивы JSON со смешанными типами данных в Go?

Как демаршалировать массивы JSON со смешанными типами данных в Go?

Опубликовано 22 декабря 2024 г.
Просматривать:466

How to Unmarshal JSON Arrays with Mixed Data Types in Go?

Демаршалинг массивов JSON со смешанными типами данных

Задача демаршаллинга массивов JSON, содержащих значения разных типов данных, часто может представлять собой сложную задачу. Например, рассмотрим следующий массив JSON:

{["NewYork",123]}

Проблема:

Во-первых, важно отметить что предоставленный JSON синтаксически неверен. Объектам JSON требуются ключи для каждого значения, поэтому правильным представлением будет либо {"key":["NewYork",123]}, либо просто ["NewYork",123].

Кроме того, при работе с JSON Если массивы состоят из нескольких типов данных, проблема возникает, когда для массивов Go требуется указанный тип. Это может заставить вас задуматься, как действовать в таких ситуациях.

Решение:

Ключом к решению этой проблемы является использование интерфейса типа{}. Это позволяет обрабатывать значения различных типов без необходимости явного преобразования типов. Вот пример кода, демонстрирующий, как это работает:

import (
    "encoding/json"
    "fmt"
)

const j = `{"NYC": ["NewYork",123]}`

type UntypedJson map[string][]interface{}

func main() {
    ut := UntypedJson{}
    fmt.Println(json.Unmarshal([]byte(j), &ut))
    fmt.Printf("%#v", ut)
}

В этом примере мы используем UntypedJson в качестве пользовательского типа, который сопоставляет строки с фрагментами интерфейса{}. Используя тип интерфейса {}, мы можем легко обрабатывать смешанные типы данных в массиве JSON.

Выходные данные программы будут такими:

<nil>
map[string][]interface{}{"NYC": \["NewYork" 123]}

Вывод:

Используя тип интерфейса{}, этот подход позволяет эффективно демаршалировать массивы JSON с различными типами данных.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3