#json #jsonschema
#json #jsonschema
Вопрос:
Я хочу формально определить схему для протокола на основе JSON. У меня есть два критерия для схемы: 1. Я хочу иметь возможность использовать инструменты для создания анализатора / сериализатора (php и .net). 2. Результирующий JSON должен быть удобен для чтения человеком
Вот контекст. Схема будет описывать игрового персонажа, в качестве примера я возьму один аспект профиля — профессии. Персонаж может иметь до 2 профессий (из списка 10), каждая профессия описывается именем и уровнем, например:
Создание скинов — уровень 200, Кузнец — уровень 300
Для удовлетворения критерия № 1 действительно полезно иметь XSD-схему (или JSON-схему) для управления генератором кода или библиотекой синтаксического анализа. Но это означает, что мой JSON должен выглядеть примерно так:
character : {
professions : [
{ profession : "Skinning", level : 525 }
{ profession : "Blacksmith", level : 745 }
]
}
но это кажется слишком болтливым, я бы предпочел, чтобы JSON выглядел как (обратите внимание, что профессия используется в качестве ключа):
character {
professions : {
"Skinning" : 525,
"Blacksmith" : 745
}
}
но более поздний JSON не может быть описан с помощью XSD без необходимости определения элемента для каждой профессии.
Итак, я ищу решение для моей ситуации, вот варианты, которые я определил:
- заткнитесь и сделайте JSON удобным для XSD (первый фрагмент выше)
- заткнитесь и сделайте JSON удобным для пользователя и вручную закодируйте анализатор / сериализатор.
но я бы действительно хотел найти решение, которое удовлетворяло бы обоим критериям.
Примечание: Я знаю, что библиотека JSON от Newton-King позволила бы мне анализировать профессии в виде словаря, но для этого мне потребовалось бы вручную ввести код типа для сопоставления этого JSON. Поэтому пока я склоняюсь к варианту № 2, но я открыт для предложений.
Ответ №1:
Переименуйте профессию в name, чтобы она выглядела как:
character : {
professions : [
{ name : "Skinning", level : 525 }
{ name : "Blacksmith", level : 745 }
]
}
Затем, после ее сериализации в клиентской модели, будет выглядеть следующим образом:
profession = character.professions[0]
profession.name
=> "Skinning"
Ответ №2:
Ваши варианты, как вы сказали … 1 заткнуться и использовать xml 2 заткнуться и создать свой собственный
Или, может быть, 3… http://davidwalsh.name/json-validation
Я бы сделал # 1 — поскольку xml кажется довольно распространенным способом преобразования материалов из форматов X => Y — я предпочитаю работать на C #, а не на JS — многие люди используют XML, это общепринятый стандарт, существует множество ресурсов, которые помогут вам на этом пути