Существует ли безопасное подмножество JSON, которое можно использовать со всеми парсерами и базами данных JSON - PullRequest
2 голосов
/ 26 июля 2010

JSON по-прежнему становится все более и более важным для обмена данными, но спецификация JSON довольно слаба в некоторых аспектах:

Имена внутри объекта ДОЛЖНЫ быть уникальными.

Реализация может устанавливать ограничения на размер текстов, которые она принимает.Реализация может устанавливать ограничения на максимальную глубину вложенности.Реализация может устанавливать ограничения на диапазон чисел.Реализация может установить ограничения на длину и символьное содержимое строк.

Я думаю, что большинство анализаторов JSON игнорируют дублированные ключи объекта и не различают минус ноль (-0) и ноль.Большинство может также ограничить число 32-разрядными числами с плавающей запятой или целыми числами со знаком.Кроме того, JSON может содержать символы, которые не являются допустимыми кодовыми точками Unicode (см. этот вопрос ).Держу пари, что у реализаций могут быть проблемы с символами Юникода выше базовой многоязычной плоскости (от U + 0000 до U + FFFF).Но это также не спецификация JSON, а базы данных JSON, такие как CouchDB, MongoDB, Persevere / Dojo и т. Д., Добавляют ограничения: я сомневаюсь, что вы можете использовать ключи объектов, такие как id, _id и $ref, среди всех хранилищ JSONможет иметь особое значение в каждой системе.

Это несколько расстраивает: JSON должен быть легким, но чем ближе вы смотрите, тем больше препятствий вы обнаружите.Существует ли общее (не слишком ограниченное) подмножество JSON, которое можно безопасно использовать среди всех парсеров и баз данных, или движение NoSQL добавит все больше и больше расширений и специальные конструкции, которые вам не следуетиспользовать в ваших документах JSON?

1 Ответ

1 голос
/ 09 мая 2011

Как правило, №

Конечно, есть довольно много ошибок (например, MongoDB дает String Parse Error для чисел, больших чем 64-битный неизмененный INT). Некоторые из них являются ошибками, в то время как другие являются неотъемлемыми ограничениями платформы - как и в любой другой нетривиальной компьютерной системе.

Но, определяя «безопасное подмножество» JSON, я, как правило, не верю, чтобы это произошло. Хотя вы можете получить JSON-схемы , заставить всех - во всем мире - договариваться о том, что можно и чего нельзя делать, вряд ли получится.

В общих чертах, JSON популярен , потому что не имеет внутренних ограничений. (В отличие от ex. ASN.1 или XML.)

...