2016-03-29 3 views
0

При разработке клиентского приложения, использующего одну из существующих служб REST, у меня есть выбор для использования ответов JSON или XML. Ответы XML описываются файлами XSD со сведениями о схеме.Как клиент знает тип данных JSON RestResponse

С помощью этих XML-схем я могу определить, какой тип данных должен быть определен, и клиент может использовать эту информацию при представлении данных пользователю или когда клиент просит пользователя изменить свойство. (Как уходит еще один вопрос btw, поскольку я не могу найти многоплатформенную реализацию XML в формате Delphi, которая поддерживает схемы XSD ... но, как я уже сказал, это другой вопрос).

Альтернативой является использование типа ответа JSON, но тогда клиент не может определить конкретный тип данных свойства, потому что все отправляется в виде строки.

Как клиент знает, что одно из этих свойств может быть индексом из перечисленного типа или целочисленным числом, или количеством или ссылкой на другой объект по его идентификатору? (Это просто примеры) Я бы подумал, что клиент не должен содержать «жестко запрограммированную» информацию о структуре ответа, или я ошибаюсь, если предположить?

+2

«Жестко закодированная» информация - это контекст, который должно знать ваше приложение. Какая польза от наличия информации, что 42 является перечислением HumptiDumpti, не зная, что такое HumptiDumpti? Если вы получите ответ, вы должны знать вопрос и контекст. –

ответ

3

JSON не имеет системы богатого типа, такой как XML, и JSON не имеет системы схем для описания таких вещей, как перечисления и ссылки, подобные XML. Но JSON имеет только несколько типов данных, а общее форматирование JSON является самоописываемыми с точки зрения того, какой тип данных любое заданное значение с помощью (см официальный JSON spec для более подробной информации):

  1. строку всегда завернуты в кавычки:

    "fieldname": "fieldvalue" 
    
  2. числовое значение цифры символов без кавычек:

    "fieldname": 12345 
    
  3. акушер Ject всегда завернут в фигурных скобках:

    "fieldname": { ... object data ... } 
    
  4. массив всегда завернут в квадратных скобках:

    "fieldname": [ ... array data ... ] 
    
  5. логическое значение всегда фиксированное true или false без цитат:

    "name": true 
    

    "name": false 
    
  6. нуль всегда фиксированный null без цитат:

    "name": null 
    

Все, что за что будет требовать от клиента иметь внешнее знание данных, которые отправляются (как схемы в XML, так как Сам XML не описывает типы данных вообще).

Смежные вопросы