Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Если мы используем JSON, например, для передачи данных по сети, то это излишество.
то приводит к очень, очень сложным моделям для парсинга
object: { a: ..., b: ...}
object2(+object): { c: ..., d: ... }property: value
another: @propertyПередача строк без кавычек бред.
И что делать парсеру если вы поменяли свойства местами?
Как ссылаться на объекты ниже, выше по иерерхии или в другой ветке?
Типы указывать вообще не нужно. Для всех данных есть модель которая их описывает.
Я так не считаю. Плюс, я не говорю, что кавычки не нужны, я говорю, что они обычно не нужны в именах пропертей.
Резолвить это, как и ссылки, после чтения файла.
Сейчас у меня ссылки идут от корня структуры, это решает все проблемы.
{
common#uniqueId: { ... },
object1: { prop: #uniqueId },
object2: { prop: #uniqueId }
}Это не всегда так, плюс, иногда бывает удобно саму модель строить по этому файлу (про это я выложу статью на днях). В этом случае типы — необходимая вещь. Если же есть модель, то типы можно не указывать, как и в JSON.
{
data: (...)
}// Плохой словарь
{
itemName1: { ... },
itemName2: { ... }
}
// Хороший словарь
[
{ key: "name1", value: { ... }, type: "Type1" },
{ key: "name2", value: { ... }, type: "Type2" }
]Если уж хочется без свойств то лучше как-то так:
И тут мне не нужен тип.
Во первых, как я узнаю тип корня?...
JSON — так себе формат для передачи данных между приложениями
По стандарту [...] все названия должны заключаться в кавычки. Если мы используем JSON, например, для передачи данных по сети, то это излишество.
Нет возможности пометить типами объекты, чтобы проще было модель понять.
Отсутствие стандартов записи объектов.
Это, например, может привести к массивам со смешанными объектами внутри.
Отсутствие ссылок.
Это банально неправда. JSON — и есть такой стандарт.
Это позволяет массивы с разнотипными объектами. Это разве плохо?
Добавите ссылки — получите необходимость обработки циклов. Оно вам надо?
Он описывает то, как объекты записываются в JavaScript'е.
В других языках, обычно, они описываются совершенно иначе.
Это позволяет массивы с разнотипными объектами. Это разве плохо?
Да.
Ну то есть возможность написать "у меня есть: корабль, машина, квартира и восемнадцать тонн бриллиантов" — это плохо?
А без ссылок — структуры разрастаются, порой, в несколько раз.
Уже давно нет.
А кого это волнует? Язык передачи данных не должен учитывать, как описываются объекты на любой стороне, он должен быть совместимым с этими сторонами.
Ну то есть возможность написать «у меня есть: корабль, машина, квартира и восемнадцать тонн бриллиантов» — это плохо?
А как же компрессия, про которую вы же выше писали?
В других языках в названиях полей класса допустимы пробелы?
Отсутствуют типы кроме строк, чисел, булевого и null?
Ну, давайте вернемся к XML, он тоже всё описывает.
В реальности использовать такие структуры очень сложно.
Если же вы дублируете объекты в JSON'е, то и в памяти результирующие объекты будут разные. Это плохо.
… Важно, чтобы были строки, числа и далее по тексту. А то если пытаться охватить в нотации все возможные типы, вы никогда не закончите.
Что сложного?
Я завтра опубликую статью про S2, где будет понятно, зачем я составляю такую структуру.
В Swift (я пишу именно в контексте этого языка) строгая типизация, коллекции — однотипные.
Требуется обрабатывать массивы (мы сейчас про массивы, не про объекты, где типы у разных полей — разные) специальными средствами, простое итерирование не подходит.
Ну то есть вы, на самом деле, пишете язык под конкретную задачу, но при этом вам не нравится JSON как формат передачи данных.
Зачем мне ваше искусственное ограничение?
Почему не подходит?
Но я считаю, что JSON — не самый хороший вариант описания структур данных, в том числе и при их передаче.
Динамическая диспетчеризация — это хорошо, но что, если с сервера в массиве начнет приходить тип, который не обрабатывается на клиенте?
Появляется обработка ошибок, возможность сломаться в любой момент.
Модель данных, наоборот, обычно старается зафиксировать формат передачи.
А вы предлагаете его отпустить в свободное изменение и написать принимающей стороне хитрую динамическую логику.
{
"title": "заголовок",
"title": "KTV. Новый JSON"
}json_decode для Neovim превратит пример в {"_TYPE": v:msgpack_types.map, "_VAL": [["title", "заголовок"], ["title", "KTV. Новый JSON"]]}. RFC 7159:An object whose names are all unique is interoperable in the sense
that all software implementations receiving that object will agree on
the name-value mappings. When the names within an object are not
unique, the behavior of software that receives such an object is
unpredictable. Many implementations report the last name/value pair
only. Other implementations report an error or fail to parse the
object, and some implementations report all of the name/value pairs,
including duplicates.
E721: Duplicate key in Dictionary: "title". *_* {name(string): Alexcoolness(double): 3.1415isAProgrammer(bool): true}
Плюсы и минусы JSONСправедливости ради, в спецификации JSON Schema они таки есть.
Отсутствие ссылок
Это — формат описания объектов в JavaScript'еПо забавному совпадению, JSON-документ с некоторыми купюрами (null/None) является валидным описанием dict в Python. Кстати, именно поэтому ваше ограничение на тип объектов в массиве выглядит надуманным, в питоне, как и в JS, можно класть объекты разного типа в массив.
Кавычки. По стандарту (в качестве стандарта я беру текст отсюда: www.json.org) все названия должны заключаться в кавычки. Если мы используем JSON, например, для передачи данных по сети, то это излишество.
Отсутствие типизации. Точнее, типы есть, но всего строка/число/true/false/null. И объекты с массивами. Всё. Ни дат, ни целых/дробных чисел нет. Нет возможности пометить типами объекты, чтобы проще было модель понять.
Отсутствие стандартов записи объектов. Это, например, может привести к массивам со смешанными объектами внутри. Когда приходится такое парсить — становится больно.
Отсутствие ссылок. Если в JSON записывать иерархическую структуру объектов, то регулярно встречаются ссылки на один и тот же объект из разных мест. JSON не даёт возможности сослаться на первое использование. Нужно либо что-то придумывать, либо повторять объекты целиком, что плохо сказывается на размере структуры и на сложности парсинга.
KTV. Новый JSON