Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3 4 5      [все]
 Посоветуйте лучшую по Вашему мнению библиотеку для работы с 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]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
_Vasilisk_
Member

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

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


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

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

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

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

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

Откуда: Украина, Харьков
Сообщений: 10852
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

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

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

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

Откуда: Украина, Харьков
Сообщений: 10852
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

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

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

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

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

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

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

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

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

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

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

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

Откуда: Минск
Сообщений: 1361
Дегтярев Евгений
Игорь_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

Откуда: г. Екатеринбург
Сообщений: 597
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

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

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

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

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

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

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


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

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

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


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

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

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

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


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

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

property Owned: Boolean write SetOwned;

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

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


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

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

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

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

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

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

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

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

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

Откуда: г. Екатеринбург
Сообщений: 597
Поигрался с 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

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

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

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

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

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

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

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

Откуда: г. Екатеринбург
Сообщений: 597
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

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

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

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

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

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

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

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

Откуда: г. Екатеринбург
Сообщений: 597
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

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

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

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

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

Откуда: Украина, Харьков
Сообщений: 10852
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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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

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

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

Откуда:
Сообщений: 10807
Игорь_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
Но если ты будешь писать "под стандарт" и твои файлы не будут открываться Йокселем...
"Ну-ты-понел" (с)
18 мар 19, 11:17    [21835699]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

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


ну и что?

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

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

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

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

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

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

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

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


ну и что?

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

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

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

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

Откуда:
Сообщений: 10807
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
18 мар 19, 14:33    [21835996]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

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

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

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

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

Откуда:
Сообщений: 10807
ну и на практике проверить, что именно получится после x := TJSONObject.ParseJSONValue('[1,2,3,4]');
18 мар 19, 14:37    [21836004]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 597
Arioch
ну и на практике проверить, что именно получится после x := TJSONObject.ParseJSONValue('[1,2,3,4]');


Проверял, работает, но через "объект массив" (TJSONOArray)
19 мар 19, 08:34    [21836809]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Игорь_UUS
Member

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

Вы путаете понятия "объект" и "массив" поэтому приведённый пример Вашего кода работать не будет
19 мар 19, 08:35    [21836812]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4481
Игорь_UUS
Arioch
ну и на практике проверить, что именно получится после x := TJSONObject.ParseJSONValue('[1,2,3,4]');


Проверял, работает, но через "объект массив" (TJSONOArray)

    class function ParseJSONValue(const Data: string; UseBool: Boolean = False): TJSONValue; overload; static;

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

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

я не путаю (особенно, раз "работает"), я допускаю большую функциональность, чем следует из одного лишь названия класса. И, видимо, угадал, что оно все же работает.

хотя, в общем-то, это ваш вопрос, не мой.

мне бы в голову не пришло голые массивы не завёрнутые в объект парсить.

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

Откуда: г. Екатеринбург
Сообщений: 597
Нашёл похоже багу в стандартных библиотеках

значение целого числа например "MyNumber":789

валидно и "v is TJSONString" и "v is TJSONNumber"


я написал собственную небольшую библиотеку, которая переводит json в TDataSet, и я не мог понять где же ошибся... библиотека определяет тип значения и назначает данный тип полю TDataSet, и получается, изначально проверялась валидность по "v is TJSONString" а потом уже "v is TJSONNumber" и тип Integer определялся как string


В моём понимании: v is TJSONString - должно быть "MyNumber":"789" а не "MyNumber":789 т.е. если кавычек нет, то это уже число как минимум, но определяется как TJSONString.

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

Откуда: г. Екатеринбург
Сообщений: 597
Всё это на DXE10.2
19 мар 19, 13:29    [21837277]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

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

посмотри дерево наследования TJSONString и TJSONNumber

очевидно, либо TJSONNumber is TJSONString, либо TJSONString is TJSONNumber

Игорь_UUS
т.е. если кавычек нет, то это уже число как минимум


А если там например ИНН - который строка состоящая из цифр ?

Кстати, "MyNumber" вообще говоря на практике может быть без кавычек (по исходному смыслу Java Script Object) и многиe библиотеки такое читают
19 мар 19, 14:27    [21837360]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10807
а строка, которая МОЖЕТ интерпретироваться, как дата, перестаёт от этого быть строкой?
19 мар 19, 14:28    [21837361]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Игорь_UUS
Member

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

посмотри дерево наследования TJSONString и TJSONNumber

очевидно, либо TJSONNumber is TJSONString, либо TJSONString is TJSONNumber

Игорь_UUS
т.е. если кавычек нет, то это уже число как минимум


А если там например ИНН - который строка состоящая из цифр ?

Кстати, "MyNumber" вообще говоря на практике может быть без кавычек (по исходному смыслу Java Script Object) и многиe библиотеки такое читают


ИНН - вообще то это строка в виде чисел! но не как не целое число

что касается: TJSONNumber is TJSONString - весело!

Давай посмотрим с другой стороны:

Если
"MyNumber":"123" то TJSONNumber <> TJSONString
"MyNumber":123 то TJSONNumber = TJSONString

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

Откуда:
Сообщений: 10807
Игорь_UUS
ИНН - вообще то это строка в виде чисел! но не как не целое число


я так и написал.

а теперь скормими ИНН JSON-библиотеке, или XML-библиотеке.
Они российских законов не знают.
И вообще, что в этом поле ИНН, а не что-то другое не знают.

как json-библиотека определит, что тут число-не-строка или строка-не-число?
никак.

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

Откуда:
Сообщений: 10807
не вижу веселья. Ты же знаешь, что в \том ключе должно быть, строка или число, так и читай.

тут и то интереснее: http://forum.codenet.ru/q73936/Хитроумный TJSONNumber: как определиться с Integer или Float?
19 мар 19, 15:38    [21837466]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1551
Arioch
как json-библиотека определит, что тут число-не-строка или строка-не-число?
никак.

не несите чушь, определит согласно стандарта

Arioch
тут и то интереснее: http://forum.codenet.ru/q73936/Хитроумный TJSONNumber: как определиться с Integer или Float?

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

Откуда:
Сообщений: 10807
все реальные json-документы до буквы соответсвуют последней версии стандарта?

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

Откуда:
Сообщений: 9707
Arioch
все реальные json-документы до буквы соответсвуют последней версии стандарта?

Косячить в крови людей. Простота JSON обманчива ....
1) Зачастую люди не понимают природу JSON и далее лепят одноименные элементы в объектах, безименные подобъекты в объектах, ссылки по каким-то именам и тд.
2) Сплошь и рядом русские буквы как есть.
3) Местами все идет без кавычек.

Ну теперь либо JSON либо не-JSON. С не-JSON хоть ИНН хоть что будет работать с или без кавычек и в любой кодировке, хоть 3х битной :)
19 мар 19, 18:58    [21837688]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1435
Dmitry Arefiev
Arioch
все реальные json-документы до буквы соответсвуют последней версии стандарта?

Косячить в крови людей. Простота JSON обманчива ....
1) Зачастую люди не понимают природу JSON и далее лепят одноименные элементы в объектах, безименные подобъекты в объектах, ссылки по каким-то именам и тд.
2) Сплошь и рядом русские буквы как есть.
3) Местами все идет без кавычек.

IMHO большинство воспринимают и используют JSON просто как упрощенный заменитель XML, при этом никакого отношения к Яве не имеющий.
20 мар 19, 04:07    [21837949]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10807
Вот к Яве он точно отнощшения никогда не имел
20 мар 19, 11:26    [21838215]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1551
Arioch
Вот к Яве он точно отнощшения никогда не имел

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

Откуда:
Сообщений: 10807
в прямом
какоe отношение JSON имеет к Яве ?


fraks
большинство воспринимают и используют JSON ... при этом никакого отношения к Яве не имеющий


т.е. типа как он имеет отноiение, но мужики-то не знают
20 мар 19, 11:53    [21838261]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Василий 2
Member

Откуда:
Сообщений: 532
Дегтярев Евгений
всмысле?

Капитан Очевидность поясняет: Arioch апеллирует к распространенной ошибке смешивания Java и JavaScript
21 мар 19, 10:27    [21839225]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1551
А это ни одно и то же?
21 мар 19, 11:27    [21839333]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
goldmi45
Member

Откуда:
Сообщений: 1132
Дегтярев Евгений
А это ни одно и то же?

Нет. Java представляет собой объектно-ориентированный язык программирования, а JavaScript - это объектно-ориентированный язык создания сценариев. Код на Java необходимо скомпилировать, а код JavaScript используется в текстовом виде.
21 мар 19, 14:26    [21839603]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

Откуда:
Сообщений: 10807
Это четыре разных человека. (c)
21 мар 19, 14:26    [21839604]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

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

Дело даже не в том, как исполняются языки.
Java-код изначально тоже интерпретировался, компилироваться он стал далеко не сразу.

Дело в том, что "Java" в названии JavaScript - чисто рекламная фишка, совместна рекламная кампания ныне не существующих Netscape и Sun, без малейшего технического к тому повода. Netscape заплатил за использованиe хайпа Sun.
21 мар 19, 14:28    [21839611]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3189
Дегтярев Евгений,

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

Откуда:
Сообщений: 10807
это связанные понятия

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

Откуда:
Сообщений: 10807
Но я думаю, это был сарказм и троллинг

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

Откуда: Барнаул
Сообщений: 1551
Arioch
Но я думаю, это был сарказм и троллинг

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

Откуда: Барнаул
Сообщений: 1551
goldmi45
Нет. Java представляет собой объектно-ориентированный язык программирования, а JavaScript - это объектно-ориентированный язык создания сценариев. Код на Java необходимо скомпилировать, а код JavaScript используется в текстовом виде.

а как же жит-компиляция в в8?
21 мар 19, 16:20    [21839822]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3189
Arioch,

ну так и жавай с js связана :) буквы одинаковые, как минимум
21 мар 19, 17:07    [21839885]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Arioch
Member

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

буквы одинаковые, да - чисто рекламное действо

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

Откуда:
Сообщений: 10807
Дегтярев Евгений
Arioch
Но я думаю, это был сарказм и троллинг

зачем вы так, у меня мир рушится...


Креативное разрушение - наше всё!

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

Откуда: Барнаул
Сообщений: 1551
Аллилуя, братья!

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

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

Как можно в Объект засунуть собранный массив?

Что имею ввиду:
  // Создаём нужный объект.
  JSONObj := TJSONObject.Create;
  ...
  JSONObj.AddPair(TJSONPair.Create('TestParam', TJSONArray.Create(["Тест 1","Тест2","Тест3"...""])));
  
25 мар 19, 09:02    [21842421]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте лучшую по Вашему мнению библиотеку для работы с json  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 1914
Игорь_UUS
Как можно в Объект засунуть собранный массив?

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

Откуда: г. Екатеринбург
Сообщений: 597
Valery_B
Игорь_UUS
Как можно в Объект засунуть собранный массив?

Сам же написал ответ, или нет ?
Если нет, то первая же ссылка в этой теме ?


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

Откуда: г. Екатеринбург
Сообщений: 597
Разобрался сам...

(TJSONObject.ParseJSONValue('["Тест1","тест2","Тест3"]')) AS TJSONArray)
25 мар 19, 09:54    [21842453]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3 4 5      [все]
Все форумы / Delphi Ответить