Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3 4      [все]
 Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 558
Добрый день.

Очень, очень буду признателен за советы
14 мар 19, 11:08    [21832187]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1300
Стандартная не подходит?
http://docwiki.embarcadero.com/RADStudio/Rio/en/JSON
14 мар 19, 11:29    [21832225]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
самая быстрая - mORMot

самая удобная на чтение - SuperObject, она также и XML читает
для создания JSON там некоторые неочевидные грабли есть, к которым надо привыкнуть.
Плюс, как всегда у Анри, крайне лаконичная документация


самая совместимая - если не ошибаюсь lkJSON работает даже с Delphi 5 (1999 года)

есть ещё штуки типа JSON Data Objects

Я обычно SuperObject пользуюсь, но дело привычки

Стандартной я бы не стал пользоваться, её до сих пор доделывают.
14 мар 19, 11:33    [21832235]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 1889
X-Cite
Стандартная не подходит?
http://docwiki.embarcadero.com/RADStudio/Rio/en/JSON

+1
Arioch
самая удобная на чтение - SuperObject, она также и XML читает

Советую сначала посмотреть на исходный код этих шедевров, особенно на SuperObject.
14 мар 19, 12:10    [21832320]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
Смотрел я на SO и даже правил.

Зато сколько разнообразных косяков было в dbExpress JSON когда он появился.... даже про TXMLDocument столько обалдевших вопросов не было

И даже без учёты выловленных и не выловленных косяков....

Rio - после многолетнего улучшения правок исправлений
LJSONObject := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(GJSONString), 0) as TJSONObject;


SuperObject
iJSON := SO(GJSONString);


Rio
LJSONObject:= TJSONObject.Create;
LJSONObject.AddPair(TJSONPair.Create(TJSONString.Create('Hello'),
TJSONString.Create('World')));
.....
LJSONObject.Destroy;


SuperObject
iJSON := SO;
iJSON.S['Hello'] := 'World';


Я искренне восхищаюсь мазохистами, но понять их не могу.

P.S. кстати, что будет если взять целую ветку (объект) из середины одного JSON-документа и перенести в другой документ ?

Примерно что-то такое:

LJSONObject1 := TJSONObject.ParseJSONValue('c:\file1.json');
LJSONObject2 := TJSONObject.ParseJSONValue('c:\file2.json');

LJSONValue := LJSONObject['city[1].street[''Ленина''].house[20]'];
LJSONObject2.AddPair('city[8].street[''Победы''].house[5]', LJSONValue);


Они разберутся на тему совместного владения этой подветкой, память не потечёт, двойного удаления не будет?
14 мар 19, 12:32    [21832372]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
Или ещё лучше, примерно что-то такое:

LJSONObject1 := TJSONObject.ParseJSONValue('c:\file1.json');
LJSONObject2 := TJSONObject.ParseJSONValue('c:\file2.json');

LJSONValue := LJSONObject['city[1].street[''Ленина''].house[20]'];
LJSONObject2.AddPair('city[8].street[''Победы''].house[5]', LJSONValue);

LJSONObject2.SaveFile;
LJSONObject2.Destroy;
LJSONObject1.Destroy;

Memo1.Linex.Add('Владелец квартиры ' + LJSONValue.GetString<string>('appartment[13].owner'));
14 мар 19, 12:36    [21832378]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4229
Игорь_UUS,

смотря для чего. парсинг, создание, сериализация\десериализация?

та что в поставке это пипец, другое слово подобрать сложно
14 мар 19, 12:45    [21832389]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 558
kealon(Ruslan)
Игорь_UUS,

смотря для чего. парсинг, создание, сериализация\десериализация?

та что в поставке это пипец, другое слово подобрать сложно


Библиотека нужна для Создания и Чтения.
14 мар 19, 13:02    [21832415]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 558
Игорь_UUS,

библиотека нужна для 10.2
14 мар 19, 13:03    [21832417]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 1889
kealon(Ruslan)
та что в поставке это пипец, другое слово подобрать сложно

И чем именно она пипец ? Можно что-нибудь конкретное ?

Она во многом повторяет NewtonSoft для VisualStudio(Или Newtonsoft во многом повторяет RadStudio)

Игорь_UUS
Игорь_UUS,
библиотека нужна для 10.2

Так чем тебе стандартная не подходит ?
14 мар 19, 13:35    [21832477]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 558
Valery_B
kealon(Ruslan)
та что в поставке это пипец, другое слово подобрать сложно

И чем именно она пипец ? Можно что-нибудь конкретное ?

Она во многом повторяет NewtonSoft для VisualStudio(Или Newtonsoft во многом повторяет RadStudio)

Игорь_UUS
Игорь_UUS,
библиотека нужна для 10.2

Так чем тебе стандартная не подходит ?


Можно попробовать стандартную... о ней многие отзываются как "сыровато". Скажите, есть где примеры посмотреть, как работать со стандартной библиотекой? (на сайте эмбаркадеро их можно сказать нет)
14 мар 19, 13:42    [21832501]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
тут примеры по SO (да, у Анри всегда документация сверx-краткая), а также в папках demo & tests
https://github.com/hgourvest/superobject

по mORMot'у надо их документацию скачать, она у них весьма наворотистая.
Навскидку можно глянуть
http://blog.synopse.info/post/2013/12/10/JSON-record-serialization
http://blog.synopse.info/post/2011/02/23/Fast-JSON-(un)serialization

http://blog.synopse.info/post/2015/02/16/Benchmarking-JsonDataObjects-JSON-parser

И вообще http://blog.synopse.info/tag/JSON
14 мар 19, 13:48    [21832513]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 1889
Игорь_UUS,

1. Может быть у вас не совсем правильное понимание работы с json ? т.е. вопрос на самом деле "Как работать с json ?"
2. В принципе, первая же ссылка которая здесь указана, ведёт на самый простой пример.
3. Её аналог я когда-то тоже приводил 21725004
14 мар 19, 13:52    [21832523]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
http://blog.synopse.info/post/2015/02/16/Benchmarking-JsonDataObjects-JSON-parser

Since JsonDataObjects has been written by Andreas Hausladen, the maintainer of the great Delphi IDE fix packs, this new JSON library is very promising.

...

Source code of the test is available in our source code repository.
https://github.com/synopse/mORMot/blob/master/SQLite3/Samples/25 - JSON performance/JSONPerfTestCases.pas


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

Только учти, что mORMot делается для высоконагруженных серверов и там скорость выжимают любой ценой.
Вероятно, что и в демке там код окажется не наиболее простой и ясный, а наиболее быстрый.
14 мар 19, 13:54    [21832529]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
Valery_B
Её аналог я когда-то тоже приводил 21725004


мрачная картинка.

похоже, решили продублировать Microsoft XmlLite для JSON

интересно, что будет, если я ошибусь и сломаю баланс вызовов StartXXX и EndYYY
14 мар 19, 13:59    [21832543]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 1889
Arioch
мрачная картинка.

Это из видео с официального канала Ембрякоделлы с Ютуба.
Видео, по моему шло там более 1.5 часа - а это суть, что бы не смотреть все полтора часа.

На мой взгляд, объяснить, как работать с Json в Delphi можно максимум минуты за 2-3.
14 мар 19, 14:07    [21832563]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
rgreat
Member

Откуда:
Сообщений: 4826
А мне больше XSuperObject нравится.
https://github.com/onryldz/x-superobject
14 мар 19, 14:31    [21832624]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
А мне нет. Смотрел я на XSO, и мне кажется, это хуже исходной SO

Кстати, в бенчах скорости SO самая медленная вроде бы, ПОСЛЕ XSO которая дескать вообще за гранью
14 мар 19, 14:34    [21832632]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 768
Мне понравился модуль cJSON.pas у Батлера:
https://github.com/fundamentalslib

С другими не сравнивал, но несколько проектов с его помощью сделал. К тому же это единственное из адекватного, что можно сейчас найти для D2007.
14 мар 19, 15:02    [21832672]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
DmSer
это единственное из адекватного, что можно сейчас найти для D2007


а lkJSON неадекватна ?

Вроде не хуже, чем "стандартный" dbx JSON по интерфейсу.

https://stackoverflow.com/questions/43882426/generate-json-array-with-lkjson-in-delphi-7
http://qaru.site/questions/7210884/parse-json-using-lkjson
14 мар 19, 16:06    [21832773]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9690
Arioch
LJSONObject := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(GJSONString), 0) as TJSONObject;


LJSONObject := TJSONObject.ParseJSONValue(GJSONString) as TJSONObject;


Arioch
LJSONObject:= TJSONObject.Create;
LJSONObject.AddPair(TJSONPair.Create(TJSONString.Create('Hello'),
                                     TJSONString.Create('World')));
.....
LJSONObject.Destroy;


LJSONObject:= TJSONObject.Create;
LJSONObject.AddPair('Hello', 'World');
.....
LJSONObject.Destroy;


Arioch
LJSONObject1 := TJSONObject.ParseJSONValue('c:\file1.json');
LJSONObject2 := TJSONObject.ParseJSONValue('c:\file2.json');

LJSONValue := LJSONObject['city[1].street[''Ленина''].house[20]'];
LJSONObject2.AddPair('city[8].street[''Победы''].house[5]', LJSONValue);


LJSONObject1 := TJSONObject.ParseJSONValue('c:\file1.json');
LJSONObject2 := TJSONObject.ParseJSONValue('c:\file2.json');

LJSONValue := LJSONObject['city[1].street[''Ленина''].house[20]'];
LJSONObject2.AddPair('city[8].street[''Победы''].house[5]', LJSONValue.Clone);


Ну и тд.
14 мар 19, 16:26    [21832796]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9690
Ну и:
* в 10.3 стандартный JSON раз в 5-6 быстрее чем 10.2
* много больше отлавливает ситуаций с некорректным синтаксисом
* генерит "правильные" исключения
и тд
14 мар 19, 16:30    [21832798]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
Dmitry Arefiev,

немножко лучше

а если я забуду добавить явноe клонировaние ?
14 мар 19, 16:30    [21832799]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
Dmitry Arefiev
Arioch
LJSONObject:= TJSONObject.Create;
LJSONObject.AddPair(TJSONPair.Create(TJSONString.Create('Hello'),
                                     TJSONString.Create('World')));
.....
LJSONObject.Destroy;



LJSONObject:= TJSONObject.Create;
LJSONObject.AddPair('Hello', 'World');
.....
LJSONObject.Destroy;


но в офиц-доке так писать не хотят....
http://docwiki.embarcadero.com/RADStudio/Rio/en/JSON_Objects_Framework


Dmitry Arefiev
Arioch
LJSONObject := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(GJSONString), 0) as TJSONObject;

LJSONObject := TJSONObject.ParseJSONValue(GJSONString) as TJSONObject;


И это тоеж я не придумывал, а всё по той же ссылке взял
14 мар 19, 16:33    [21832802]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10771
Arioch
а если я забуду добавить явноe клонировaние ?
Будет двойной Free
14 мар 19, 19:10    [21832965]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10771
Arioch
но в офиц-доке так писать не хотят....
http://docwiki.embarcadero.com/RADStudio/Rio/en/JSON_Objects_Framework
Наверняка дока не менялась с момента появления
14 мар 19, 19:11    [21832967]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
_Vasilisk_
Arioch
а если я забуду добавить явноe клонировaние ?
Будет двойной Free


Прэлэмтно! Прэлэстно!

В общем, я для себе давно вывел правило.
Если какая-то проблема решается в Delphi библиотекой "из коробки" и сторонней библиотекой - надёжнее использовать стороннюю. Особенно если она бесплатная и с исходниками

Конечно, оно не абсолютное, но для первого приближения, пока не доказано обратное, она верна
14 мар 19, 19:51    [21832987]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
_Vasilisk_,

а если вот так - 21832378 ?
14 мар 19, 19:52    [21832988]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10771
Arioch
а если вот так - 21832378 ?
Аналогично. Если один JSON объект передать во внутрь второго, то второй становится владельцем первого и сам его уничтожает.

И да, в TJSONValue нет default свойства. Так, что вместо
Arioch
LJSONValue := LJSONObject['city[1].street[''Ленина''].house[20]'];
нужно писать
LJSONValue := LJSONObject.P['city[1].street[''Ленина''].house[20]'];
Это для Rio
14 мар 19, 20:18    [21833017]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
_Vasilisk_,

там не на это упор

там суть в том, что оба JSON Document я уже отдестроил, а вот после этого начинаю читать Value поддерева документа (которая была сохранена в отдельную переменную TObject)
14 мар 19, 20:28    [21833025]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10771
Arioch
там суть в том, что оба JSON Document я уже отдестроил, а вот после этого начинаю читать Value поддерева документа (которая была сохранена в отдельную переменную TObject)
Аналогично. Родитель уничтожает за собой всех детей.

Должно быть
LJSONObject1 := TJSONObject.ParseJSONValue('c:\file1.json');
LJSONObject2 := TJSONObject.ParseJSONValue('c:\file2.json');

LJSONValue := LJSONObject1['city[1].street[''Ленина''].house[20]'].clone();  // Забираем себе в пользование. Клонируем
LJSONObject2.AddPair('city[8].street[''Победы''].house[5]', LJSONValue.clone()); // Отдаем другому объекту. Клонируем

LJSONObject2.SaveFile;
LJSONObject2.Destroy;
LJSONObject1.Destroy;

Memo1.Linex.Add('Владелец квартиры ' + LJSONValue.GetString<string>('appartment[13].owner'));
LJSONValue.Free;  // Уничтожаем свой экземпляр
try - finally добавить по вкусу
15 мар 19, 00:55    [21833145]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 558
Ещё вопрос...

Если использовать стандартную библиотеку, там предусмотрена передачи бинарных данных ("файла" например) в тот же "Writer"?

И можно ли читать бинарные данные из json?
15 мар 19, 07:30    [21833221]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1300
Игорь_UUS
Ещё вопрос...

Если использовать стандартную библиотеку, там предусмотрена передачи бинарных данных ("файла" например) в тот же "Writer"?

И можно ли читать бинарные данные из json?

Думаю можно через BinToHex и HexToBin преобразовать из бинарного в шеснадцатиричную строку и наоборот
15 мар 19, 09:12    [21833287]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1496
Игорь_UUS
И можно ли читать бинарные данные из json?

json - это UTF-8 текст, представь бинарные данные в виде текста и будет счастье

X-Cite
Думаю можно через BinToHex и HexToBin преобразовать из бинарного в шеснадцатиричную строку и наоборот

base64 выгоднее
15 мар 19, 09:24    [21833299]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1300
Дегтярев Евгений
Игорь_UUS
И можно ли читать бинарные данные из json?

json - это UTF-8 текст, представь бинарные данные в виде текста и будет счастье

X-Cite
Думаю можно через BinToHex и HexToBin преобразовать из бинарного в шеснадцатиричную строку и наоборот

base64 выгоднее

Точно.. что-то не подумал...
http://docwiki.embarcadero.com/Libraries/Rio/en/System.NetEncoding.TNetEncoding
TNetEncoding.Base64.Encode()
TNetEncoding.Base64.Decode()
15 мар 19, 09:46    [21833315]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 558
X-Cite
Дегтярев Евгений
пропущено...

json - это UTF-8 текст, представь бинарные данные в виде текста и будет счастье

пропущено...

base64 выгоднее

Точно.. что-то не подумал...
http://docwiki.embarcadero.com/Libraries/Rio/en/System.NetEncoding.TNetEncoding
TNetEncoding.Base64.Encode()
TNetEncoding.Base64.Decode()


Получается:

EncodeBytesToString.EncodeBytesToString()
EncodeBytesToString.DecodeStringToBytes()
15 мар 19, 11:29    [21833466]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
_Vasilisk_
Arioch
там суть в том, что оба JSON Document я уже отдестроил, а вот после этого начинаю читать Value поддерева документа (которая была сохранена в отдельную переменную TObject)
Аналогично. Родитель уничтожает за собой всех детей.


Т.е. на пустом месте получаем use-after-free!
Отличная библиотека.

Напоминая, что в этом крайне коротком и простейшем из возможных коде - ты ошибки не видел пока я пальцем не ткнул.
В реальном сложном коде - и не увидишь.

_Vasilisk_
Должно быть
LJSONValue := LJSONObject1['city[1].street[''Ленина''].house[20]'].clone();  // Забираем себе в пользование. Клонируем
LJSONObject2.AddPair('city[8].street[''Победы''].house[5]', LJSONValue.clone()); // Отдаем другому объекту. Клонируем


Должно быть, чтобы все программы сразу писались без ошибок. Но так редко бывает.

Если библиотеке нужно что-то клонировтаь, чтобы работать без ошибок - то лучше пусть клонирует сама, не надеясь на программиста.
15 мар 19, 12:54    [21833636]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1496
Arioch
пусть клонирует сама, не надеясь на программиста.

и убьет производительность
15 мар 19, 13:00    [21833653]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
Игорь_UUS
Ещё вопрос...

Если использовать стандартную библиотеку, там предусмотрена передачи бинарных данных ("файла" например) в тот же "Writer"?

И можно ли читать бинарные данные из json?


В модуле SOAP.EncdDecd - который был ещё когда System.NetEncoding не было - есть два класса TStream, которые encode и decode base64

Соответсвенно скармливаешь им TFileStream и TStringStream (через TStream.CopyFrom)

Можно и TNetEncoding.DecodeStringToBytes подвязать в IOUtils.TFile.WriteAllBytes
Но 1) "Input Strings for Decode and DecodeStringToBytes should be UTF8 encoded." - такие вещи IMHO библиотека должна сама обеспечивать. Потому что ты рано или поздно забудешь. Не говоря про лишний мусор в коде.
2) TBytes нормально сработает с маленькими файлами, так что тебе именно в этом случае париться наверное смысла нет. Но вообще с файлами заранее неизвестного размера рекомендуется работать кусками и целиком их в память не грузить.
15 мар 19, 13:03    [21833661]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
Дегтярев Евгений
Arioch
пусть клонирует сама, не надеясь на программиста.

и убьет производительность


т.е. если я вызову клонирование оно отработает в разы быстрее, чем если то же клонирование вызовет библиотека ?
15 мар 19, 13:04    [21833663]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
Дегтярев Евгений
Arioch
пусть клонирует сама, не надеясь на программиста.

и убьет производительность


не хочет клонировать - пусть не клонирует

но пусть не удаляет до того, как я закончл с ним работу
15 мар 19, 13:04    [21833666]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4229
Arioch
Дегтярев Евгений
пропущено...

и убьет производительность


не хочет клонировать - пусть не клонирует

но пусть не удаляет до того, как я закончл с ним работу
есть такое свойство

property Owned: Boolean write SetOwned;

ставь в false и удаляй сам
тогда клонировать не нужно
15 мар 19, 13:24    [21833714]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
kealon(Ruslan)
ставь в false и удаляй сам
тогда клонировать не нужно


отлично! Значит библиотека его и может ставить.

мы в конце концов на ассемблере пишем, или на языке высокого уровня?

вообще, если кому-то надо проценты скорости выжимать, что вы делаете на Delphi с его знаменито-плохим оптимизатором, возхможно худшим из всех компиляторов вообще ?
15 мар 19, 13:29    [21833727]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10771
Arioch
Напоминая, что в этом крайне коротком и простейшем из возможных коде - ты ошибки не видел пока я пальцем не ткнул.
Правильно. Потому, что передача объекта от одного родителя к другому это большая редкость.

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

Ты же не пытаешься обращаться к комбобоксу после уничтожения формы?
15 мар 19, 14:34    [21833890]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10771
Игорь_UUS
И можно ли читать бинарные данные из json?
Есть System.JSONB. Сам не использовал, но по идее, это то, что вам нужно
15 мар 19, 14:35    [21833895]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9690
Arioch
отлично! Значит библиотека его и может ставить.

Не может, если задуматься :)
15 мар 19, 14:40    [21833906]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 558
Поигрался с json в поставке 10.2

конечно своеобразный подход)) по началу даже немного непонятный))


Скажите TJSONObject.ParseJSONValue - это единственная возможность начать чтение json?

например
var JSONarr : TJSONArray;
...
...

JSONarr := TJSONObject.ParseJSONValue(Memo1.Text) as TJSONArray;


к чему спрашиваю...
получается у остальных классах (например TJSONArray) возможности прочитать json нет на подобии как TJSONObject.ParseJSONValue
15 мар 19, 14:42    [21833909]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
Dmitry Arefiev,

может, просто должна быть написана соответствующим образом, начиная с типов.
если в ассемблере нет контроля типов данных - это не значит, что его вообще ни в одном языке не может быть.
В C не было, а в C++ появился.

Писать на ассемблере иногда забавно. Иногда (теперь уже редко) - полезно.

Вот эта библиотека - ассемблер. В ней разложили граблей на всех поворотах "ради скорости".


_Vasilisk_
Есть System.JSONB. Сам не использовал, но по идее, это то, что вам нужно

Вряд ли. Это просто другой формат того-же JSON.
https://toster.ru/q/315910

Аналогично EBML, BinaryXML, MessagePack и т.д.

А у него задача внутри JSON передать неформатированный бинарник
15 мар 19, 15:00    [21833935]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
Игорь_UUS,

возьми стандарт JSON или хотя бы просто историю откуда он взялся

JSON - это объект на языке JavaScript (изначально, сейчас чем-то уже отличается).
В терминах Delphi - record.

Может ли record быть array? нет, это разные типы.

Поэтому у array нет функции грузить себя (ParseXXXX) из record - такого просто не может быть в JSON
15 мар 19, 15:02    [21833937]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
_Vasilisk_
Потому, что передача объекта от одного родителя к другому это большая редкость.


1) я ничего никуда не передавал, я просто вызвал функцию библиотеки "добавить новое значение", что она там внутри делает - это "детали реализации" прикладному программисту не нужные. Она просто должна в другом документе сделать те же дланные, и всё.

2) но это вообще не важно. Из последнего примера вообще убери второй документ - ничего не изменится.
Суть проблемы в другом, что когда я читаю данные из JsonValue (в Memo - но это частности, могу бы и в БД и куда угодно) - это JsonValue оказывается кем-то со стороны уже разрушено.

Проблема именно в этом, use after free, при том что именно я никакого free для jsonValue не делал вообще.

На каждом повороте - лежат грабли.
Зато якобы, если ты прошёл все квесты и на бегу успел увидеть и перепрыгнут ьВСЕ грабли, то у тебя будет быстрый код.

Dmitry Arefiev
в 10.3 стандартный JSON раз в 5-6 быстрее чем 10.2


Если добежишь.
Если тебе вообще был нужен тут самый-быстрый-в-мире-код в этом месте (в самом деле нужно каждую секунду новый мегабайт JSONа парсить?).

И даже при этом mORMot и JSO будут скорее всего быстрее. И тот же mORMot как заявлено работает с SON бесконечного размера.

Т.е. "стандартный" - всё равно это "грабли минус скорость".
По удобству и безопасности - ассемблер, по скорости кода - бейсик (но хороший, быстрый бейсик).
15 мар 19, 15:10    [21833947]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 558
Arioch
Игорь_UUS,

возьми стандарт JSON или хотя бы просто историю откуда он взялся

JSON - это объект на языке JavaScript (изначально, сейчас чем-то уже отличается).
В терминах Delphi - record.

Может ли record быть array? нет, это разные типы.

Поэтому у array нет функции грузить себя (ParseXXXX) из record - такого просто не может быть в JSON



хм... но "В терминах Delphi", тот же TJSONArray уж точно не record...
15 мар 19, 15:26    [21833963]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 558
Господа помогите разобраться с ещё одни моментом...

как правило в json дата приходит в таком виде "2019-03-15T18:00:15.896"

посоветуйте как правильно её перевести в TDateTime?
15 мар 19, 16:39    [21834071]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9690
Arioch
И тот же mORMot как заявлено работает с SON бесконечного размера.

TJsonTextReader
15 мар 19, 16:57    [21834090]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9690
Игорь_UUS
как правило в json дата приходит в таком виде "2019-03-15T18:00:15.896"
посоветуйте как правильно её перевести в TDateTime?

TryISO8601ToDate
15 мар 19, 16:58    [21834094]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 558
Dmitry Arefiev
Игорь_UUS
как правило в json дата приходит в таком виде "2019-03-15T18:00:15.896"
посоветуйте как правильно её перевести в TDateTime?

TryISO8601ToDate


Дмитрий спасибо...


гораздо удобней... я сделал таким способом:

    Year        := StrToInt(Copy(JSONDate, 1, 4));
    Month       := StrToInt(Copy(JSONDate, 6, 2));
    Day         := StrToInt(Copy(JSONDate, 9, 2));
    Hour        := StrToInt(Copy(JSONDate, 12, 2));
    Minute      := StrToInt(Copy(JSONDate, 15, 2));
    Second      := StrToInt(Copy(JSONDate, 18, 2));
//    Millisecond := Round(StrToFloat(Copy(JSONDate, 19, 4)));

    Result := EncodeDateTime(Year, Month, Day, Hour, Minute, Second, Millisecond);
15 мар 19, 17:19    [21834119]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
ёёёёё
Member

Откуда:
Сообщений: 4
Игорь_UUS,

верный выбор - superobject. Работать можно начиная с D7, а начиная с D10 начинаются дополнительные вкусные плюшки.

Кодить проще, безопаснее, быстрее.
15 мар 19, 17:42    [21834146]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
Игорь_UUS
гораздо удобней...


открываем стандарт JSON, читаем как там дата передаётся.
да просто в гугле забиваем "json date format"

выясняем, что это ISO 8601

ищем "8601" в исходниках delphi и других библиотек.

....Только одно - зачем вообще нужно читать дату как строку? читайте её из JSON-библиотеки сразу в формате TDateTime. Или там кроме даты ещё что-то другое может быть в этом поле?


Dmitry Arefiev
Arioch
И тот же mORMot как заявлено работает с SON бесконечного размера.

TJsonTextReade


Вполне возможно, что он лучше. Но его тут не предлагали, кажется, и примеров работы с ним не было тоже.
15 мар 19, 17:49    [21834156]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10771
Arioch
Суть проблемы в другом, что когда я читаю данные из JsonValue (в Memo - но это частности, могу бы и в БД и куда угодно) - это JsonValue оказывается кем-то со стороны уже разрушено.
Не тормози. Объясни мне, чем это
LJsonObject := ........
try
  LJsonValue := LJsonObject.GetValue<>(...);
finally
  LJsonObject.Free;
end;
Memo1.Lines.Add(LJsonValue.ToString);
принципиально отличается от этого
LForm := TMyForm.Create(nil);
try
  LEdit := LForm.Edit1;
finally
  LForm.Free;
end;
Memo1.Lines.Add(LEdit.Text);
?

И почему исключение в первом коде это ахтунг, а во втором - кривые руки программиста?
15 мар 19, 17:56    [21834165]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
_Vasilisk_,

тем, что в случае VCL библиотека писалась в 25 лет назад, когда 4 мегабайта памяти было большой удачей, а писать на ассемблере - вполне нормально.

Если ты сейчас пишешь для 80286 и Windows 3.11, то обе библиотеки хороши и вопрос в програмисте.

А если ты открутишь счётчик ещё на 25 лет назад, то и в машинных кодах писать нормально будет.
15 мар 19, 18:13    [21834188]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
Игорь_UUS
как правило в json дата приходит в таком виде "2019-03-15T18:00:15.896"

посоветуйте как правильно её перевести в TDateTime?


var JsonDocument, JsonValue: iSuperObject;
     MyDate: TDate;
     HasDate : boolean;

.....
   JsonValue := JsonDocument['city[10].street["Ленина"].house[2].Founded'];
   HasDate := TryObjectToDate(JsonValue, MyDate);


Вообще - тоже заковыристо, лучше бы напрямую свойство было.
Может быть в XSuperObject и добавили, хз.
15 мар 19, 18:20    [21834189]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4229
Arioch
_Vasilisk_,

тем, что в случае VCL библиотека писалась в 25 лет назад, когда 4 мегабайта памяти было большой удачей, а писать на ассемблере - вполне нормально.

Если ты сейчас пишешь для 80286 и Windows 3.11, то обе библиотеки хороши и вопрос в програмисте.

А если ты открутишь счётчик ещё на 25 лет назад, то и в машинных кодах писать нормально будет.
а не пойти ли Вам в Яву или Шарп?
15 мар 19, 18:23    [21834196]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
kealon(Ruslan),

да-да, я тоже когда-то гордился умением делать всё наиболее трудоёмким и геморройным путём, и ни-ко-гда не использовал в Delphi типы interface - ведь ARC это таaак долгооооо.

Даже когда вместо AMD 80286 16MHz 2MB появился AMD K6 200MHz 64Mb

Потом отпустило.
15 мар 19, 18:26    [21834201]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4229
Arioch,

но в принципе щас можно и стильно\модно\молодёжно


+
program Test1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, System.JSON, Rest.Json;

type
  TTest = class(TObject)
    FDate: TDateTime;
    FName: string;
  public

  end;

  TJSonHelper = class helper for TJson
  public
    class procedure JsonStrToObject(AObject:TObject; AStr: string; AOptions: TJsonOptions = [joDateIsUTC, joDateFormatISO8601]);
  end;

var
  v: TTest;
  s: string;

{ TJSonHelper }

class procedure TJSonHelper.JsonStrToObject(AObject: TObject; AStr: string; AOptions: TJsonOptions);
var
  o: TJSONAncestor;
begin
  o := TJSONObject.ParseJSONValue(AStr);
  try
    Self.JsonToObject(AObject, o as TJSONObject, AOptions);
  finally
    o.Free;
  end;
end;

begin
  try
    v := TTest.Create();
    try
      s := '{"date":"2019-03-15T18:00:15.896","name":"Test"}';
      TJson.JsonStrToObject(v, s);
      s := TJson.ObjectToJsonString(v);
      Writeln(v.FName, ' = ', DateToStr(v.FDate));
      Writeln(s);
    finally
      v.Free;
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
15 мар 19, 18:45    [21834225]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
kealon(Ruslan),

кстати, интересно, как объекты сериализирует "чистый" SuperObject

подозреваю, что он тупо пишет по принципу TDateTime = double
15 мар 19, 19:15    [21834256]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1496
Arioch
открываем стандарт JSON, читаем как там дата передаётся.
да просто в гугле забиваем "json date format"

так все таки в стандарте или в гугле?
json оперирует весьма небольшим набором типов и среди них нет ни даты ни вемени
использование обозначенного общепринятого формата норм идея, а на практике может быть все что угодно

зы
я бы вместо iso8061 смотрел в сторону более удобного в использовании rfc3339

зызы
в одном из проектов для времени использую int32 как внутри так в json
15 мар 19, 20:22    [21834311]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
ёёёёё
Member

Откуда:
Сообщений: 4
DmSer
Мне понравился модуль cJSON.pas у Батлера:
https://github.com/fundamentalslib

С другими не сравнивал, но несколько проектов с его помощью сделал. К тому же это единственное из адекватного, что можно сейчас найти для D2007.


Предостерегу: баги при работе с float:

https://github.com/fundamentalslib/fundamentals5/issues/9
https://github.com/fundamentalslib/fundamentals5/issues/3



А с D2007 справляется superobject, постоянно использую.
15 мар 19, 20:41    [21834318]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 558
Ещё маленький вопрос, наверное из разряда "правильный/не правильный" синтаксис JSON.

Обратил внимание, что все имена переменных идут в нижнем регистре, например:

"specimen_code":"258520000",
"bodycite_code":null,

это принципиально? или можно "SpecimenCode":"258520000" и это тоже правильно т.е. дело каждого и это не принципиально
сегодня, 08:52    [21835582]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
Дегтярев Евгений
Arioch
открываем стандарт JSON, читаем как там дата передаётся.
да просто в гугле забиваем "json date format"

так все таки в стандарте или в гугле?


Надежнее - в стандарте, быстрее - в гугле :-)

json оперирует весьма небольшим набором типов и среди них нет ни даты ни вемени
использование обозначенного общепринятого формата норм идея, а на практике может быть все что угодно


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

в одном из проектов для времени использую int32 как внутри так в json

В принципе - да, любое приложение может определять (хотя бы исходниками, если не формально) любой свой собственный протокол. И в том же XML можно дату в собственном формате класть, и в SQL часто double кладут...
сегодня, 11:10    [21835691]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
Игорь_UUS
это принципиально? или можно "SpecimenCode":"258520000" и это тоже правильно


https://www.json.org/json-ru.html

member :::
ws string ws ':' element

string :::
'"' characters '"'

characters :::
""
character characters

character :::
'0020' . '10FFFF' - '"' - '\'
'\' escape

escape :::
'"'
'\'
'/'
'b'
'n'
'r'
't'
'u' hex hex hex hex

hex :::
digit
'A' . 'F'
'a' . 'f'


Теоретически - вот так.

На практике же лучше смотри что в реальности умеют и не умеют все библиотеки, с которыми ты будешь взаимодействовать.

Например Microsoft Excel местами нарушает стандарт Microsoft Office OpenXML
Но если ты будешь писать "под стандарт" и твои файлы не будут открываться Йокселем...
"Ну-ты-понел" (с)
сегодня, 11:17    [21835699]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
Игорь_UUS
хм... но "В терминах Delphi", тот же TJSONArray уж точно не record...


ну и что?

TJSONArray должен отображать в Delphi реальность JSON, а не наоборот.
сегодня, 11:23    [21835709]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1496
Arioch
Ну в таком случае вместо "стандарта на JSON" должен быть "стандарт на протокол конкретного приложения", тэк-сэзэть.

именно
сегодня, 11:48    [21835733]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 558
Arioch, спасибо.

Получается можно и верхний и нижний регистр букв использовать...
сегодня, 11:50    [21835735]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1496
Игорь_UUS
Получается можно и верхний и нижний регистр букв использовать...

стандарт не накладывает на это ограничений, ключ - любая валидная с точки зрения стандарта строка
но как и сказали выше, смотри, сможешь ли ты с этим работать
сегодня, 11:58    [21835744]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
s62
Member

Откуда: Жуковский
Сообщений: 893
Arioch
Игорь_UUS
хм... но "В терминах Delphi", тот же TJSONArray уж точно не record...


ну и что?

TJSONArray должен отображать в Delphi реальность JSON, а не наоборот.

В стандарте JSON нет такого, чтобы текст JSON представлял из себя объект. Это может быть просто массив.
"[5, 6, 7, 8]" - валидный текст JSON.
сегодня, 13:02    [21835847]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
s62
Member

Откуда: Жуковский
Сообщений: 893
s62,

" с обеих сторон я поставил, чтобы показать, что внутри строка, это у меня не часть самого текста.
сегодня, 13:06    [21835852]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
s62
"[5, 6, 7, 8]" - валидный текст JSON.


Любопытно. Видимо да, после того как JSON оторвали от JS буква O - Object - потеряла смысл.

Впрочем, советуют всё равно против массивов как начала.
Якобы массивы опасны для безопасности, и поэтому многие библиотеки откажутся от такого документа.

https://security.stackexchange.com/questions/7001/how-should-web-app-developers-defend-against-json-hijacking/7003#7003
сегодня, 14:33    [21835996]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
Игорь_UUS,

в Delphi например "ExpertsExchange" и "ExpertSexChange" - один и тот же идентификатор.

Будешь если сериализовать записи/объекты - разный регистр может сыграть злую шутку.

Или даже не ты, а опять же, другая программа с которой ты общаться будешь,
сегодня, 14:35    [21836001]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10598
ну и на практике проверить, что именно получится после x := TJSONObject.ParseJSONValue('[1,2,3,4]');
сегодня, 14:37    [21836004]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3 4      [все]
Все форумы / Delphi Ответить