Необходими ли са JSON схеми за дефиниране на структурата на JSON?

Питам това, защото виждам, че текущата чернова на JSON схема (http://json-schema.org/ ) предлага да има схема на JSON по следния начин:

за JSON:

{
 "a":"abc"
 "b": 123
}

предложената в проекта схема е като

{
 "type":"object"
 "properties":{
  "a": {"type":"string"}
  "b": {"type":"integer"}
 }
}

Въпросът ми тук е дали самият JSON не дефинира своята структура? Необходима ли е отделна схема?

Схемата, предложена от черновата, валидира JSON, които имат горната структура и тези JSON винаги са във формат

{
 "a":"string"
 "b": 1 (or some number)
}

И така, каква е нуждата от отделна схема за JSON. Можем просто да използваме JSON, за да дефинираме и неговата структура.

PS. Знам, че можем да посочим някои ограничения за стойностите, които JSON може да приема чрез схемите, предложени в черновата, но от гледна точка на дефиниране на структурата на JSON, необходими ли са предложените схеми?


person glugglug    schedule 24.06.2014    source източник


Отговори (2)


Самият JSON не дефинира структурата. Например, мога да напиша:

{
  "a": "string",
  "b": "another string"
}

Това също е валиден JSON - но е "различно структуриран" JSON, защото "b" вече е низ. Но вашият API може да приема само JSON с определена структура, така че въпреки че е валиден JSON, това не е формата, от която се нуждаете.

Сега имате ли нужда JSON схема, за да дефинирате структурата на вашите JSON данни? Не. Вместо това можете да кажете:

Стойността трябва да е обект. Трябва да има две свойства:

  • "a" - трябва да е низ
  • "b" - трябва да е цяло число

Програмистът може да разбере това много лесно, без криволичещи скоби или нещо подобно.

Въпреки това, има предимства от наличието на машинно четимо описание на формата, защото ви позволява да автоматизирате различни неща (напр. тестване, генериране на документация, генериране на код/класове и т.н.)


Редактиране: Както е посочено в коментарите, можете да вземете информацията за типа от някои примерни данни и да ги използвате като модел за други данни. В този случай вие основно използвате вашите примерни данни като супер-основна схема.

За много прости ограничения (основен тип) това работи. Как обаче бихте казали, че "b" трябва да бъде цяло число вместо плаващо число? Как казвате, че "b" трябва да е > 0? Как казвате, че "a" не трябва да е празен низ ("")?

Наистина има инструменти, които генерират основна JSON схема от примерни данни - обаче получената схема обикновено изисква малко корекция, за да опише действително формата (напр. мин./макс., задължителни/незадължителни свойства и т.н.).

person cloudfeet    schedule 26.06.2014
comment
но гледайки JSON, типът на количеството е изводим. Така че мога да кажа, че самият екземпляр на JSON съдържа информацията за типа и структурата - person glugglug; 30.06.2014
comment
Типът може да бъде изведен по следния начин: 1. Ако стойността е обградена с кавички, тя е низ (abc) 2. Ако стойността е вярно/невярно (без кавички), тогава тя е булева 3. Ако е null (без кавички), тогава представлява null 4. Ако е число/десетичен (без кавички), тогава е числов тип - person glugglug; 30.06.2014
comment
А, нали - значи говориш за проверка спрямо примерни данни, вместо схема? Справедливо - въпреки че как да разберете разликата между цяло число/плаваща запетая или да посочите минимална дължина за низове и т.н.? - person cloudfeet; 30.06.2014
comment
Добавен раздел в отговора. - person cloudfeet; 30.06.2014
comment
Да, съгласен съм, че ако трябва да се уточнят допълнителни ограничения, като дължина на низ или регулярни изрази, той трябва да съвпада и т.н., са необходими JSON схеми. Но ако за мен е важна само информацията за тип и структура, мога да използвам самия екземпляр като схема, нали? - person glugglug; 01.07.2014
comment
Разбира се – ако не е необходимо да правите разлика между цели числа и числа, да указвате задължително/незадължително и т.н., тогава можете просто да използвате примерен екземпляр вместо схема. Ако заглавието беше Необходима ли е JSON схема, ако трябва да кажа само този конкретен ограничен набор от неща, тогава отговорът е не - но заглавието не е много конкретно и неща като задължително/незадължително и цяло число /число са доста често срещани ограничения. - person cloudfeet; 02.07.2014

Досега никога не е било необходимо и в краткосрочен план не мисля, че ще бъде необходимо.

Аз лично харесвам JSON заради неговата простота, преносимост и гъвкавост.

Не виждам дори големи марки да използват тази схема, така че досега не я приемат сериозно.

person Quijote Shin    schedule 24.06.2014
comment
Бихте ли считали Heroku за основна марка? :стр - person cloudfeet; 26.06.2014
comment
Какво ще кажете за Google (въпреки че използват v3)? Те също така използват JSON Schema за някои вътрешни неща в Chrome. - person cloudfeet; 26.06.2014
comment
в такъв случай е време да очакваме схеми напред, като говорим за API. Добра практика е да дефинирате вашите обекти. - person Quijote Shin; 26.06.2014
comment
@cloudfeet можеш ли да ми дадеш още няколко системи, за които знаеш, че използват JSON схеми, за да мога да видя какво предоставят. Благодаря предварително! - person glugglug; 01.07.2014