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

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

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

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

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

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


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

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

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

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

Откуда: Москва
Сообщений: 1914
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

Откуда:
Сообщений: 10807
Смотрел я на 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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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


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

Откуда:
Сообщений: 10807
тут примеры по 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

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

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

Откуда:
Сообщений: 10807
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

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


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

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

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

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

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

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

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

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

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

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

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

Откуда:
Сообщений: 10807
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

Откуда:
Сообщений: 9707
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

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

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

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

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

Откуда:
Сообщений: 10807
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

Откуда: Украина, Харьков
Сообщений: 10852
Arioch
а если я забуду добавить явноe клонировaние ?
Будет двойной Free
14 мар 19, 19:10    [21832965]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
Все форумы / Delphi Ответить