Здравствуйте, CreatorCray, Вы писали:
K>>>Клиентский код должен знать что ему нужно в итоге получить: int, float, string,... BFE>>Если клиентскому коду нужен int, а пришла строка "12345". Это ошибка в файле Json? CC>json сам по себе это тупо строка.
Не согласен. json — это не тупо строка. Например: {"x":null} означает, что x — это объект.
CC>Там всё в текстовом виде.
Фраза ни о чём. Если алфавит из 256 символов, то любой файл — это просто текст.
CC> Если клиенту надо int то он значение (строку) затолкает в string->int конвертор, и тот либо сконвертирует либо скажет "Ошибка! Попробуй! Ещё! Раз!" (tm)
А если клиенту надо int, а приходит объект, то нет ничего сложного сконвертировать его в число: null — это 0, а остальное — 1. Я правильно понимаю?
И каждый день — без права на ошибку...
Re[10]: JSON vs BSON: очередное торжество больного воображения и кривых рук
Здравствуйте, CreatorCray, Вы писали:
BFE>>парсер, который ничего не делает CC>Парсер разбирает формат на токены. Импортировать разобранное — не его задача вообще. BFE>> действительно просто написать — клиент пусть сам разбирается! BFE>>Это, извините, не парсер. Это токинайзер. CC>
CC>https://www.merriam-webster.com/dictionary/parser CC>
CC>parser noun
CC>: one that parses
CC>specifically : a computer program that breaks down text into recognized strings of characters for further analysis
Синтаксический анализатор (жарг. па́рсер ← англ. parser) — это программа или часть программы, выполняющая синтаксический анализ.
Синтакси́ческий ана́лиз (или разбор, жарг. па́рсинг ← англ. parsing) в лингвистике и информатике — процесс сопоставления линейной последовательности лексем (слов, токенов) естественного или формального языка с его формальной грамматикой. Результатом обычно является дерево разбора (синтаксическое дерево). Обычно применяется совместно с лексическим анализом.
Regardless of where the program comes from it must first pass through a Tokenizer, or as it is sometimes called, a Lexer. The tokenizer is responsible for dividing the input stream into individual tokens, identifying the token type, and passing tokens one at a time to the next stage of the compiler.
The next stage of the compiler is called the Parser. This part of the compiler has an understanding of the language's grammar. It is responsible for identifying syntax errors and for translating an error free program into internal data structures that can be interpreted or written out in another language.
BFE>>Парсер, в отличии от токинайзера, должен понимать грамматику и выдавать результат ей соответствующий. CC>А он именно грамматику формата и понимает. Но конвертацией типов данных он не занимается.
Конечно конвертацией парсер не занимается. Разве это я утверждал?
И каждый день — без права на ошибку...
Re[11]: JSON vs BSON: очередное торжество больного воображен
Здравствуйте, B0FEE664, Вы писали:
CC>>Парсер разбирает формат на токены. Импортировать разобранное — не его задача вообще. BFE>>> действительно просто написать — клиент пусть сам разбирается! BFE>>>Это, извините, не парсер. Это токинайзер.
Токенайзер выдаёт линейный поток токенов, в случае json это будет плоский список {, "field1", :, "value", "field2", :, 42, }. А парсер проверит баланс скобок, проверит, что токены разделителей типа запятых и двоеточий стоят как надо и отдаст уже древовидную структуру клиенту. И собственно всё.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, ·, Вы писали:
·>Токенайзер выдаёт линейный поток токенов, в случае json это будет плоский список {, "field1", :, "value", "field2", :, 42, }. А парсер проверит баланс скобок, проверит, что токены разделителей типа запятых и двоеточий стоят как надо и отдаст уже древовидную структуру клиенту. И собственно всё.
Т.е., таки, строку "\u00312345" в "12345" никто преобразовывать не будет?
И каждый день — без права на ошибку...
Re[6]: JSON vs BSON: очередное торжество больного воображени
Здравствуйте, Baiker, Вы писали:
B>Практически никаких ограничений на название поля. Да кто вообще сказал, что это поле?! Это просто "именованное нечто", как хочу — так и интерпретирую. B>Ты этого даже не понял.
B>В JSON может и можно что-то подсократить (к примеру, escape-последовательности), но в целом формат оптимален. Надо просто думать чуть абстрактнее.
О да! вот, например, хороший вариант записывать точку 3D в Json: { "23" : "x", "24": "y", "24" : "z" }. Надо просто думать чуть абстрактнее.
И каждый день — без права на ошибку...
Re[7]: JSON vs BSON: очередное торжество больного воображения и кривых рук
Здравствуйте, vsb, Вы писали:
vsb>Самые общераспространённые структуры данных это массивы и отображения (объекты тоже можно представить в виде отображений). В XML нет ни того, ни другого. И если отображения ещё можно как-то имитировать в виде вложенных тегов, то массивы — нельзя. В JSON этой проблемы нет.
В JSON нет массивов. Это, извините, не массив: [1, "not array"]
И каждый день — без права на ошибку...
Re[8]: JSON vs BSON: очередное торжество больного воображения и кривых рук
Здравствуйте, B0FEE664, Вы писали:
vsb>>Самые общераспространённые структуры данных это массивы и отображения (объекты тоже можно представить в виде отображений). В XML нет ни того, ни другого. И если отображения ещё можно как-то имитировать в виде вложенных тегов, то массивы — нельзя. В JSON этой проблемы нет.
BFE>В JSON нет массивов. Это, извините, не массив: [1, "not array"]
Почему?
Re[21]: JSON vs BSON: очередное торжество больного воображения и кривых рук
Здравствуйте, B0FEE664, Вы писали:
BFE>А если клиенту надо int, а приходит объект, то нет ничего сложного сконвертировать его в число: null — это 0, а остальное — 1. Я правильно понимаю?
Нет, неправильно. Попробуй ещё раз.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[13]: JSON vs BSON: очередное торжество больного воображен
Здравствуйте, B0FEE664, Вы писали:
BFE>·>Токенайзер выдаёт линейный поток токенов, в случае json это будет плоский список {, "field1", :, "value", "field2", :, 42, }. А парсер проверит баланс скобок, проверит, что токены разделителей типа запятых и двоеточий стоят как надо и отдаст уже древовидную структуру клиенту. И собственно всё. BFE>Т.е., таки, строку "\u00312345" в "12345" никто преобразовывать не будет?
Токенайзер этим занимается. Иначе, например, \" он не сможет правильно на токены побить.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[12]: JSON vs BSON: очередное торжество больного воображен
Здравствуйте, ·, Вы писали:
·>Токенайзер выдаёт линейный поток токенов, в случае json это будет плоский список {, "field1", :, "value", "field2", :, 42, }. А парсер проверит баланс скобок, проверит, что токены разделителей типа запятых и двоеточий стоят как надо и отдаст уже древовидную структуру клиенту. И собственно всё.
Это зависит от конкретного парсера. Бывает по разному. В частности, токены с числовыми константами чуть менее чем во всех видимых мною парсерах преобразуются в число даже не парсером, а лексером.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[13]: JSON vs BSON: очередное торжество больного воображен
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>·>Токенайзер выдаёт линейный поток токенов, в случае json это будет плоский список {, "field1", :, "value", "field2", :, 42, }. А парсер проверит баланс скобок, проверит, что токены разделителей типа запятых и двоеточий стоят как надо и отдаст уже древовидную структуру клиенту. И собственно всё.
НС>Это зависит от конкретного парсера. Бывает по разному. В частности, токены с числовыми константами чуть менее чем во всех видимых мною парсерах преобразуются в число даже не парсером, а лексером.
Если это было какое-то возражение или хотя бы какая-то новая информация, то я не понял. Ты повторил сказанное мною, только назвал токенайзер лексером, что практически одно и тоже.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[14]: JSON vs BSON: очередное торжество больного воображен
Здравствуйте, ·, Вы писали:
НС>>Это зависит от конкретного парсера. Бывает по разному. В частности, токены с числовыми константами чуть менее чем во всех видимых мною парсерах преобразуются в число даже не парсером, а лексером. ·>Если это было какое-то возражение или хотя бы какая-то новая информация, то я не понял. Ты повторил сказанное мною, только назвал токенайзер лексером, что практически одно и тоже.
Я запутался. Началось все с заявления CreatorCray
По хорошему, именно что парсер должен разобрать входной поток на структурированные токены а валидацией (т.е. пониманием что это не число нифига, или формат даты неправильный) должен заниматься собственно код импорта этой структуры.
А ты вроде с ним был согласен.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[9]: JSON vs BSON: очередное торжество больного воображения и кривых рук
Здравствуйте, B0FEE664, Вы писали:
BFE> BFE>>В JSON нет массивов. Это, извините, не массив: [1, "not array"] BFE> vsb>Почему?
BFE> По определению:
BFE> Массив в программировании — набор однотипных элементов, ...
BFE> https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2
In computer science, an array is a data structure consisting of a collection of elements (values or variables), each identified by at least one array index or key.
Ну они и есть однотипные. У всех тип JsonNode (или Object или Any или ещё какой-нибудь подобный).
Если не нравится слово "массив", можно назвать это списком, хотя это и некорректно. JSON произошёл от JavaScript-а, в котором эта конструкция называется массивом, нравится это википедии или нет.
Здравствуйте, rudzuk, Вы писали:
BFE>> BFE>>В JSON нет массивов. Это, извините, не массив: [1, "not array"] BFE>> vsb>Почему? BFE>> По определению: BFE>> Массив в программировании — набор однотипных элементов, ... BFE>> https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2 R>array of Variant; R>array of TObject; R>Элементы однотипные, но есть нюанс... Впрочем:
Если использовать стиратели типов, тогда конечно.
R>https://en.wikipedia.org/wiki/Array_(data_structure) R>
In computer science, an array is a data structure consisting of a collection of elements (values or variables), each identified by at least one array index or key.
R>И ни слова о типах.
Ну не совсем:
Arrays are useful mostly because the element indices can be computed at run time. Among other things, this feature allows a single iterative statement to process arbitrarily many elements of an array. For that reason, the elements of an array data structure are required to have the same size and should use the same data representation. The set of valid index tuples and the addresses of the elements (and hence the element addressing formula) are usually,[3][5] but not always,[2] fixed while the array is in use.
Если array может хранить различные элементы, то чем он тогда отличается кортежа?
И каждый день — без права на ошибку...
Re[11]: JSON vs BSON: очередное торжество больного воображен
Здравствуйте, vsb, Вы писали:
BFE>>>>В JSON нет массивов. Это, извините, не массив: [1, "not array"] vsb>Ну они и есть однотипные. У всех тип JsonNode (или Object или Any или ещё какой-нибудь подобный).
Ага. С пометкой, что за тип у него внутри.
vsb>Если не нравится слово "массив", можно назвать это списком, хотя это и некорректно.
Мне не массив не нравится. Мне эта конструкция не нравится, потому как не нужна и никогда не используется на практике.
vsb>JSON произошёл от JavaScript-а, в котором эта конструкция называется массивом, нравится это википедии или нет.
Ну так я и говорю про зашоренность авторов, которые кроме как про JavaScript ни о чём не подумали.
И каждый день — без права на ошибку...
Re[14]: JSON vs BSON: очередное торжество больного воображен
Здравствуйте, ·, Вы писали:
BFE>>·>Токенайзер выдаёт линейный поток токенов, в случае json это будет плоский список {, "field1", :, "value", "field2", :, 42, }. А парсер проверит баланс скобок, проверит, что токены разделителей типа запятых и двоеточий стоят как надо и отдаст уже древовидную структуру клиенту. И собственно всё. BFE>>Т.е., таки, строку "\u00312345" в "12345" никто преобразовывать не будет? ·>Токенайзер этим занимается. Иначе, например, \" он не сможет правильно на токены побить.