Является ли список/массив действительным JSON?
Я хочу написать веб-сервис, который обслуживает списки объектов JSON. Действительно ли JSON возвращает следующее:
[
{"keyA1":"valA", "keyB1":"valB"}
,{"keyA2":"valA", "keyB2":"valB"}
,{"keyA3":"valA", "keyB3":"valB"}
]
Или это "правильный" способ сделать это, чтобы поместить его в один возвращаемый объект:
{"elements":[
{"keyA1":"valA", "keyB1":"valB"}
,{"keyA2":"valA", "keyB2":"valB"}
,{"keyA3":"valA", "keyB3":"valB"}
]}
Ответы
Ответ 1
Обе формы действительны. Однако для API я бы рекомендовал вторую форму. Причина в том, что он дает вам путь для расширения вашего API.
Например, если у вас есть API getUsersInGroup
, который возвращает массив пользовательских объектов, а позже вы решите, что хотите включить, скажем, некоторую совокупную статистику о возвращаемых пользователях, нет простого способа сделать это без (или включая множество избыточных данных в каждом пользовательском объекте). Если вы используете объект, вы просто добавляете другое поле в объект, который молча игнорируется клиентами в предыдущей версии API.
Короче говоря, старайтесь избегать примитивов верхнего уровня, где это возможно, в вашем API, и вам будет легче его расширять в будущем.
Ответ 2
Вы можете проверить JSON, используя http://jsonlint.com/
Оба являются действительными результатами JSON, но я бы использовал второй. Это более логично и описательно.
Ответ 3
Оба действительны JSON, но второй способ правильный; передача JSON вокруг как массив может привести к уязвимостям безопасности. См. сообщение о безопасности JSON, чтобы узнать об этом подробнее. В некоторых рамках, таких как фляжка, существуют даже меры, которые мешают вам проходить вокруг JSON в виде массива.