LINUX.ORG.RU

Golang: одна структура для xml и json

 , , ,


0

2

Нужно генерировать/парсить:
JSON

{"data": "Hello", "data_type": "plaintext"}
XML
<xxx xmlns="http://example.org/ns"><data type="plaintext">Hello</data></xxx>
В общем, чего тут сложного? Однако, нужно бы всё это сделать с помощью одной основной структуры для JSON и XML.

И тут начинаются сложности. Например, в старой версии Go (точно не скажу, в какой) всё это можно было реализовать так:

type Xxx struct {
    XMLName xml.Name `xml:"http://example.org/ns xxx" json:"-"`
    Data    Data     `xml:"data"` // Было: json:"..." не прописан, содержимое Data будет вставлено линейно
}

type Data struct {
    Value string `xml:",chardata" json:"data"`
    Type  string `xml:"type,attr" data_type:"data"`
}
Однако, сейчас этот код сгенерирует следующий JSON
{"Data":{"data": "Hello", "data_type": "plaintext"}}
Ибо они этот «баг» поправили. Свойство ``,inline`` ещё в 2011 году назвали бесполезным и «частным случаем». Фигли делать? Неужели создавать две хрен знает насколько длинные структуры: отдельно для JSON и для XML?



Последнее исправление: CYB3R (всего исправлений: 2)

Опечатка вкралась в исходный пост, конечно же, должно быть:

Type  string `xml:"type,attr" json:"data_type"`

jenyadoe
() автор топика

с помощью одной основной структуры для JSON и XML.

Поверь, это очень-очень плохо. Если я правильно понял, о чем ты говоришь.

хрен знает насколько длинные

У тебя же в интерфейсе всего две операции: генерировать и парсить?

buddhist ★★★★★
()
Ответ на: комментарий от buddhist

Поверь, это очень-очень плохо. Если я правильно понял, о чем ты говоришь.

Отчего ж? Если абсолютно идентичный набор данных как для JSON, так и для XML.

У тебя же в интерфейсе всего две операции: генерировать и парсить?

Две второстепенные - распарсить и сгенерить.

jenyadoe
() автор топика

Нафига так? Нельзя что ли основываться на своей структуре, а уже к ней прикрутить сериализацию json/xml.

anonymous
()

Свойство ``,inline`` ещё в 2011 году назвали бесполезным

И взамен ничего не предложили? Может тогда каким-нить препроцессором сделать то что ты хочешь?

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

И взамен ничего не предложили?

На багтрекере есть issue с просьбой добавить + сам коммит с реализацией + комменты тех, кто считает это полезным. И куча ответов от project member'ов в стиле «ненужно». Должно быть, golang пилят лор-овцы.

Может тогда каким-нить препроцессором сделать то что ты хочешь?

Задачи выполнить любым путём, главное чтобы работало не стоит. Цель - написать изящную и простую имплементацию протокола X на Golang, тип проекта - хобби, сроки - неограничены.

jenyadoe
() автор топика
Ответ на: комментарий от jenyadoe

И куча ответов от project member'ов в стиле «ненужно».

Это они умеют, да. Форкай код encoding/{xml,json} и допиливай.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.