Я хочу формально определить схему для протокола на основе JSON.
У меня есть два критерия для схемы:
1. Я хочу иметь возможность использовать инструменты для создания парсера / сериализатора (php и .net).
2. Результат JSON должен легко читаться человеком
Вот контекст. Схема будет описывать игрового персонажа, в качестве примера я возьму один аспект профиля - профессии.
Персонаж может иметь до 2 профессий (из списка 10), каждая профессия описывается именем и уровнем, например ::100100
Скиннинг - уровень 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 Ньютона-Кинга позволила бы мне анализировать профессии в качестве словаря, но мне потребовалось бы вручную написать код типа для сопоставления этого JSON. Поэтому пока я склоняюсь к варианту № 2, но я открыт для предложений.