Comments 21
Ничего не понял. А зачем это надо и что оно даст?
+25
Ну это же ненормальное программирование. Оно не должно что-то давать. Оно просто есть.
В качестве одно из примеров применения могу предложить передачу объектов, содержащие значения не входящие в спецификацию JSON. Для простоты возьму ObjectId из MongoDB.
Вот берем какой-нибудь документик:
Этот документ, не является валидным JSON.
А мы возьмём и преобразуем его в JSON-формат:
И всё, теперь это валидный JSON. Написать функцию восстановления тоже не составит труда.
В качестве одно из примеров применения могу предложить передачу объектов, содержащие значения не входящие в спецификацию JSON. Для простоты возьму ObjectId из MongoDB.
Вот берем какой-нибудь документик:
{
_id: ObjectId("562d2063bc0f12de6a000001")
}
Этот документ, не является валидным JSON.
А мы возьмём и преобразуем его в JSON-формат:
{
"t": "object",
"v": [{
"n": "_id",
"t": "objectid",
"v": "562d2063bc0f12de6a000001"
}]
}
И всё, теперь это валидный JSON. Написать функцию восстановления тоже не составит труда.
+1
Что-то не понимаю примера. Берем BJSON и перегоняем в NSNJSON только из-за того, что можем так сделать?
+1
:) пример демонстрирует один из способов применения. Примером я хотел показать, как передавать данные, которые не являются валидным JSON. Хотелось придумать формат, который основывался на каком-нибудь известном формате и требовал бы минимум усилий для написания драйверов для этого формата.
+1
Не лучше ли вместо JSON использовать более приспособленные для этого форматы?
+1
Только вот
Cледовательно,
И никакой магии.
Но уж если хочется странного, то логичнее:
Тогда будет много проще написать свой сериализатор/десериализатор как функцию второго аргумента JSON.stringify(value[, replacer[, space]])/JSON.parse(text[, reviver]).
ObjectId("562d2063bc0f12de6a000001").str === "562d2063bc0f12de6a000001"
Cледовательно,
{
"_id": "562d2063bc0f12de6a000001"
}
И никакой магии.
Но уж если хочется странного, то логичнее:
{
"_id": {"$objectid": "562d2063bc0f12de6a000001"}
}
Тогда будет много проще написать свой сериализатор/десериализатор как функцию второго аргумента JSON.stringify(value[, replacer[, space]])/JSON.parse(text[, reviver]).
0
Как потом понять что это был именно ObjectId из такого объекта:
?
Это еще один способ, да. Но лично мне не нравится это тем, что приходится явно указывать «строение» id.
{
"_id": "562d2063bc0f12de6a000001"
}
?
Это еще один способ, да. Но лично мне не нравится это тем, что приходится явно указывать «строение» id.
0
А никак. Единственное полезное, что можно сделать с полем _id — это прочитать его, и, в крайнем случае, сконструировать новый такой же объект:
Понятно, что вы это делаете без особого смысла, но по пути вы потеряли очень полезное, на мой взгляд, свойство JSON-а: человекочитаемость.
Один способ, как сохранить это свойство и передать тип я уже назвал. Только что придумал еще один:
Не так сильно раздувается размер, и не так сильно страдает читаемость.
ObjectId(data._id)
Понятно, что вы это делаете без особого смысла, но по пути вы потеряли очень полезное, на мой взгляд, свойство JSON-а: человекочитаемость.
Один способ, как сохранить это свойство и передать тип я уже назвал. Только что придумал еще один:
{
"_id": ["objectid", "562d2063bc0f12de6a000001"],
"array": ["array", []]
}
{
"": ["null"]
}
Не так сильно раздувается размер, и не так сильно страдает читаемость.
0
У вас ус отклеился везде
"t": "null"
. +2
UFO just landed and posted this here
Так можно и одним типом string обойтись. И передавать через JSON не только невалидный JSON, но и код в любом другом формате или на языке программирования. Надо будет просто функцию восстановления написать.
{
value: "................................................"
}
0
А еще можно взять и поменять местами все буквы на клавиатуре.
+1
осталось только добавить схемы и назвать jsoap
0
Уважаемые, почему такая реакция в разделе «Ненормальное программирование»? :) Решение не предлагается для промышленного внедрения. Преследовалась совершенно простая цель. Никаких намеков на производительность и крутость! :) Разве данная статья противоречит правилам Хабра или раздела «Ненормальное программирование»? :) За что минусы-то? :)
+2
Я думаю потому, что приведенное решение не только не нормально, но еще и поставленную вами же задачу не решили.
Вы решали задачу, как представить в JSON произвольные типы, но получилось у вас только усложнить синтаксис, а произвольные типы все еще представить не удалось (корежить человекопонятный жисон, и все равно передавать не тип, а строку — это не решение).
Встроить в жисон интерпретатор брейнфака, и декодировать им значения — отличная идея. Превращать старый добрый словарь в массив объектов — нет.
Вы решали задачу, как представить в JSON произвольные типы, но получилось у вас только усложнить синтаксис, а произвольные типы все еще представить не удалось (корежить человекопонятный жисон, и все равно передавать не тип, а строку — это не решение).
Встроить в жисон интерпретатор брейнфака, и декодировать им значения — отличная идея. Превращать старый добрый словарь в массив объектов — нет.
0
Вы решали задачу, как представить в JSON произвольные типы, но получилось у вас только усложнить синтаксис, а произвольные типы все еще представить не удалось (корежить человекопонятный жисон, и все равно передавать не тип, а строку — это не решение).
В чем конкретно мне не удалось решить поставленную задачу представления JSON типов? Прошу отметить, что в статье речь идет исключительно о null, true, false, number, string, array, object.
корежить человекопонятный жисон, и все равно передавать не тип, а строку — это не решение
Я если честно, не понял Ваш этот комментарий.
0
Sign up to leave a comment.
Усложнённый упрощённый JSON