powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
114 сообщений из 114, показаны все 5 страниц
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39785780
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Очень, очень буду признателен за советы
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39785807
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стандартная не подходит?
http://docwiki.embarcadero.com/RADStudio/Rio/en/JSON
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39785813
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самая быстрая - mORMot

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


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

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

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

Стандартной я бы не стал пользоваться, её до сих пор доделывают.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39785875
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteСтандартная не подходит?
http://docwiki.embarcadero.com/RADStudio/Rio/en/JSON
+1
Ariochсамая удобная на чтение - SuperObject, она также и XML читает

Советую сначала посмотреть на исходный код этих шедевров, особенно на SuperObject.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39785901
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотрел я на SO и даже правил.

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

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

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


SuperObjectiJSON := SO(GJSONString);


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


SuperObjectiJSON := 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);


Они разберутся на тему совместного владения этой подветкой, память не потечёт, двойного удаления не будет?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39785904
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);

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

Memo1.Linex.Add('Владелец квартиры ' + LJSONValue.GetString<string>('appartment[13].owner'));
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39785911
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUS,

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

та что в поставке это пипец, другое слово подобрать сложно
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39785930
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Игорь_UUS,

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

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

Библиотека нужна для Создания и Чтения.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39785931
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь_UUS,

библиотека нужна для 10.2
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39785957
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)та что в поставке это пипец, другое слово подобрать сложно
И чем именно она пипец ? Можно что-нибудь конкретное ?

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

Игорь_UUSИгорь_UUS,
библиотека нужна для 10.2
Так чем тебе стандартная не подходит ?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39785970
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valery_Bkealon(Ruslan)та что в поставке это пипец, другое слово подобрать сложно
И чем именно она пипец ? Можно что-нибудь конкретное ?

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

Игорь_UUSИгорь_UUS,
библиотека нужна для 10.2
Так чем тебе стандартная не подходит ?

Можно попробовать стандартную... о ней многие отзываются как "сыровато". Скажите, есть где примеры посмотреть, как работать со стандартной библиотекой? (на сайте эмбаркадеро их можно сказать нет)
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39785979
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут примеры по 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
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39785985
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUS,

1. Может быть у вас не совсем правильное понимание работы с json ? т.е. вопрос на самом деле "Как работать с json ?"
2. В принципе, первая же ссылка которая здесь указана, ведёт на самый простой пример.
3. Её аналог я когда-то тоже приводил 21725004
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39785987
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 делается для высоконагруженных серверов и там скорость выжимают любой ценой.
Вероятно, что и в демке там код окажется не наиболее простой и ясный, а наиболее быстрый.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39785997
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BЕё аналог я когда-то тоже приводил 21725004

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

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

интересно, что будет, если я ошибусь и сломаю баланс вызовов StartXXX и EndYYY
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786007
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochмрачная картинка.

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

На мой взгляд, объяснить, как работать с Json в Delphi можно максимум минуты за 2-3.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786042
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне больше XSuperObject нравится.
https://github.com/onryldz/x-superobject
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786048
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне нет. Смотрел я на XSO, и мне кажется, это хуже исходной SO

Кстати, в бенчах скорости SO самая медленная вроде бы, ПОСЛЕ XSO которая дескать вообще за гранью
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786074
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне понравился модуль cJSON.pas у Батлера:
https://github.com/fundamentalslib

С другими не сравнивал, но несколько проектов с его помощью сделал. К тому же это единственное из адекватного, что можно сейчас найти для D2007.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786119
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786127
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch
Код: pascal
1.
LJSONObject := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(GJSONString), 0) as TJSONObject;



Код: pascal
1.
LJSONObject := TJSONObject.ParseJSONValue(GJSONString) as TJSONObject;



Arioch
Код: pascal
1.
2.
3.
4.
5.
LJSONObject:= TJSONObject.Create;
LJSONObject.AddPair(TJSONPair.Create(TJSONString.Create('Hello'),
                                     TJSONString.Create('World')));
.....
LJSONObject.Destroy;



Код: pascal
1.
2.
3.
4.
LJSONObject:= TJSONObject.Create;
LJSONObject.AddPair('Hello', 'World');
.....
LJSONObject.Destroy;



Arioch
Код: pascal
1.
2.
3.
4.
5.
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);



Код: pascal
1.
2.
3.
4.
5.
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);



Ну и тд.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786128
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и:
* в 10.3 стандартный JSON раз в 5-6 быстрее чем 10.2
* много больше отлавливает ситуаций с некорректным синтаксисом
* генерит "правильные" исключения
и тд
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786129
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev,

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

а если я забуду добавить явноe клонировaние ?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786132
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry ArefievArioch
Код: pascal
1.
2.
3.
4.
5.
LJSONObject:= TJSONObject.Create;
LJSONObject.AddPair(TJSONPair.Create(TJSONString.Create('Hello'),
                                     TJSONString.Create('World')));
.....
LJSONObject.Destroy;




Код: pascal
1.
2.
3.
4.
LJSONObject:= TJSONObject.Create;
LJSONObject.AddPair('Hello', 'World');
.....
LJSONObject.Destroy;



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


Dmitry ArefievArioch
Код: pascal
1.
LJSONObject := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(GJSONString), 0) as TJSONObject;


Код: pascal
1.
LJSONObject := TJSONObject.ParseJSONValue(GJSONString) as TJSONObject;



И это тоеж я не придумывал, а всё по той же ссылке взял
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786207
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochа если я забуду добавить явноe клонировaние ?Будет двойной Free
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786208
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochно в офиц-доке так писать не хотят....
http://docwiki.embarcadero.com/RADStudio/Rio/en/JSON_Objects_Framework Наверняка дока не менялась с момента появления
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786222
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Ariochа если я забуду добавить явноe клонировaние ?Будет двойной Free

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

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

Конечно, оно не абсолютное, но для первого приближения, пока не доказано обратное, она верна
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786223
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

а если вот так - 21832378 ?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786239
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochа если вот так - 21832378 ?Аналогично. Если один JSON объект передать во внутрь второго, то второй становится владельцем первого и сам его уничтожает.

И да, в TJSONValue нет default свойства. Так, что вместоArioch
Код: pascal
1.
LJSONValue := LJSONObject['city[1].street[''Ленина''].house[20]'];

нужно писать
Код: pascal
1.
LJSONValue := LJSONObject.P['city[1].street[''Ленина''].house[20]'];

Это для Rio
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786243
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

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

там суть в том, что оба JSON Document я уже отдестроил, а вот после этого начинаю читать Value поддерева документа (которая была сохранена в отдельную переменную TObject)
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786308
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochтам суть в том, что оба JSON Document я уже отдестроил, а вот после этого начинаю читать Value поддерева документа (которая была сохранена в отдельную переменную TObject)Аналогично. Родитель уничтожает за собой всех детей.

Должно быть
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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 добавить по вкусу
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786350
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё вопрос...

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

И можно ли читать бинарные данные из json?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786406
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUSЕщё вопрос...

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

И можно ли читать бинарные данные из json?
Думаю можно через BinToHex и HexToBin преобразовать из бинарного в шеснадцатиричную строку и наоборот
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786414
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUSИ можно ли читать бинарные данные из json?
json - это UTF-8 текст, представь бинарные данные в виде текста и будет счастье

X-CiteДумаю можно через BinToHex и HexToBin преобразовать из бинарного в шеснадцатиричную строку и наоборот
base64 выгоднее
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786427
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев ЕвгенийИгорь_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()
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786515
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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()
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786618
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Ariochтам суть в том, что оба JSON Document я уже отдестроил, а вот после этого начинаю читать Value поддерева документа (которая была сохранена в отдельную переменную TObject)Аналогично. Родитель уничтожает за собой всех детей.

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

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

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



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

Если библиотеке нужно что-то клонировтаь, чтобы работать без ошибок - то лучше пусть клонирует сама, не надеясь на программиста.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786628
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochпусть клонирует сама, не надеясь на программиста.
и убьет производительность
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786633
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_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 нормально сработает с маленькими файлами, так что тебе именно в этом случае париться наверное смысла нет. Но вообще с файлами заранее неизвестного размера рекомендуется работать кусками и целиком их в память не грузить.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786635
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев ЕвгенийAriochпусть клонирует сама, не надеясь на программиста.
и убьет производительность

т.е. если я вызову клонирование оно отработает в разы быстрее, чем если то же клонирование вызовет библиотека ?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786638
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев ЕвгенийAriochпусть клонирует сама, не надеясь на программиста.
и убьет производительность

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

но пусть не удаляет до того, как я закончл с ним работу
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786664
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochДегтярев Евгенийпропущено...

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

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

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

Код: pascal
1.
property Owned: Boolean write SetOwned;


ставь в false и удаляй сам
тогда клонировать не нужно
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786668
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)ставь в false и удаляй сам
тогда клонировать не нужно

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

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

вообще, если кому-то надо проценты скорости выжимать, что вы делаете на Delphi с его знаменито-плохим оптимизатором, возхможно худшим из всех компиляторов вообще ?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786760
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochНапоминая, что в этом крайне коротком и простейшем из возможных коде - ты ошибки не видел пока я пальцем не ткнул.Правильно. Потому, что передача объекта от одного родителя к другому это большая редкость.

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

Ты же не пытаешься обращаться к комбобоксу после уничтожения формы?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786764
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUSИ можно ли читать бинарные данные из json?Есть System.JSONB. Сам не использовал, но по идее, это то, что вам нужно
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786772
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochотлично! Значит библиотека его и может ставить.
Не может, если задуматься :)
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786773
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поигрался с json в поставке 10.2

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


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

например
Код: pascal
1.
2.
3.
4.
5.
var JSONarr : TJSONArray;
...
...

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



к чему спрашиваю...
получается у остальных классах (например TJSONArray) возможности прочитать json нет на подобии как TJSONObject.ParseJSONValue
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786785
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev,

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

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

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


_Vasilisk_Есть System.JSONB. Сам не использовал, но по идее, это то, что вам нужно
Вряд ли. Это просто другой формат того-же JSON.
https://toster.ru/q/315910

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

А у него задача внутри JSON передать неформатированный бинарник
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786786
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUS,

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

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

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

Поэтому у array нет функции грузить себя (ParseXXXX) из record - такого просто не может быть в JSON
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786794
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_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 бесконечного размера.

Т.е. "стандартный" - всё равно это "грабли минус скорость".
По удобству и безопасности - ассемблер, по скорости кода - бейсик (но хороший, быстрый бейсик).
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786801
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AriochИгорь_UUS,

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

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

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

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


хм... но "В терминах Delphi", тот же TJSONArray уж точно не record...
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786857
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа помогите разобраться с ещё одни моментом...

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

посоветуйте как правильно её перевести в TDateTime?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786870
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochИ тот же mORMot как заявлено работает с SON бесконечного размера.
TJsonTextReader
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786873
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUSкак правило в json дата приходит в таком виде "2019-03-15T18:00:15.896"
посоветуйте как правильно её перевести в TDateTime?
TryISO8601ToDate
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786892
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry ArefievИгорь_UUSкак правило в json дата приходит в таком виде "2019-03-15T18:00:15.896"
посоветуйте как правильно её перевести в TDateTime?
TryISO8601ToDate

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


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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
    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);
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786910
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUS,

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

Кодить проще, безопаснее, быстрее.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786914
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUSгораздо удобней...

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

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

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

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


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

Вполне возможно, что он лучше. Но его тут не предлагали, кажется, и примеров работы с ним не было тоже.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786919
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochСуть проблемы в другом, что когда я читаю данные из JsonValue (в Memo - но это частности, могу бы и в БД и куда угодно) - это JsonValue оказывается кем-то со стороны уже разрушено.Не тормози. Объясни мне, чем это
Код: pascal
1.
2.
3.
4.
5.
6.
7.
LJsonObject := ........
try
  LJsonValue := LJsonObject.GetValue<>(...);
finally
  LJsonObject.Free;
end;
Memo1.Lines.Add(LJsonValue.ToString);

принципиально отличается от этого
Код: pascal
1.
2.
3.
4.
5.
6.
7.
LForm := TMyForm.Create(nil);
try
  LEdit := LForm.Edit1;
finally
  LForm.Free;
end;
Memo1.Lines.Add(LEdit.Text);

?

И почему исключение в первом коде это ахтунг, а во втором - кривые руки программиста?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786935
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

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

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

А если ты открутишь счётчик ещё на 25 лет назад, то и в машинных кодах писать нормально будет.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786936
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUSкак правило в json дата приходит в таком виде "2019-03-15T18:00:15.896"

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
var JsonDocument, JsonValue: iSuperObject;
     MyDate: TDate;
     HasDate : boolean;

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



Вообще - тоже заковыристо, лучше бы напрямую свойство было.
Может быть в XSuperObject и добавили, хз.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786942
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch_Vasilisk_,

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

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

А если ты открутишь счётчик ещё на 25 лет назад, то и в машинных кодах писать нормально будет.а не пойти ли Вам в Яву или Шарп?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786944
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

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

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

Потом отпустило.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786960
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

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


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
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.

...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39786980
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

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

подозреваю, что он тупо пишет по принципу TDateTime = double
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39787015
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochоткрываем стандарт JSON, читаем как там дата передаётся.
да просто в гугле забиваем "json date format"
так все таки в стандарте или в гугле?
json оперирует весьма небольшим набором типов и среди них нет ни даты ни вемени
использование обозначенного общепринятого формата норм идея, а на практике может быть все что угодно

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

зызы
в одном из проектов для времени использую int32 как внутри так в json
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39787018
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, постоянно использую.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39787536
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё маленький вопрос, наверное из разряда "правильный/не правильный" синтаксис JSON.

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

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

это принципиально? или можно "SpecimenCode":"258520000" и это тоже правильно т.е. дело каждого и это не принципиально
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39787615
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев ЕвгенийAriochоткрываем стандарт JSON, читаем как там дата передаётся.
да просто в гугле забиваем "json date format"
так все таки в стандарте или в гугле?

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

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

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

в одном из проектов для времени использую int32 как внутри так в json
В принципе - да, любое приложение может определять (хотя бы исходниками, если не формально) любой свой собственный протокол. И в том же XML можно дату в собственном формате класть, и в SQL часто double кладут...
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39787619
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_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
Но если ты будешь писать "под стандарт" и твои файлы не будут открываться Йокселем...
"Ну-ты-понел" (с)
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39787625
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUSхм... но "В терминах Delphi", тот же TJSONArray уж точно не record...

ну и что?

TJSONArray должен отображать в Delphi реальность JSON, а не наоборот.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39787644
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochНу в таком случае вместо "стандарта на JSON" должен быть "стандарт на протокол конкретного приложения", тэк-сэзэть.

именно
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39787646
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arioch, спасибо.

Получается можно и верхний и нижний регистр букв использовать...
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39787653
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUSПолучается можно и верхний и нижний регистр букв использовать...
стандарт не накладывает на это ограничений, ключ - любая валидная с точки зрения стандарта строка
но как и сказали выше, смотри, сможешь ли ты с этим работать
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39787714
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochИгорь_UUSхм... но "В терминах Delphi", тот же TJSONArray уж точно не record...

ну и что?

TJSONArray должен отображать в Delphi реальность JSON, а не наоборот.
В стандарте JSON нет такого, чтобы текст JSON представлял из себя объект. Это может быть просто массив.
"[5, 6, 7, 8]" - валидный текст JSON.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39787717
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62,

" с обеих сторон я поставил, чтобы показать, что внутри строка, это у меня не часть самого текста.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39787797
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39787800
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUS,

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

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

Или даже не ты, а опять же, другая программа с которой ты общаться будешь,
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39787803
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и на практике проверить, что именно получится после x := TJSONObject.ParseJSONValue('[1,2,3,4]');
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39788159
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ariochну и на практике проверить, что именно получится после x := TJSONObject.ParseJSONValue('[1,2,3,4]');

Проверял, работает, но через "объект массив" (TJSONOArray)
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39788161
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arioch,

Вы путаете понятия "объект" и "массив" поэтому приведённый пример Вашего кода работать не будет
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39788199
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUSAriochну и на практике проверить, что именно получится после x := TJSONObject.ParseJSONValue('[1,2,3,4]');

Проверял, работает, но через "объект массив" (TJSONOArray)
Код: pascal
1.
    class function ParseJSONValue(const Data: string; UseBool: Boolean = False): TJSONValue; overload; static;


в даннном случае возвращает TJSONArray
проверять и приводить нужно самому
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39788282
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUS,

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

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

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

вот и я узнал что-то новое
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39788392
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашёл похоже багу в стандартных библиотеках

значение целого числа например "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.

Получается бага или я что-то недопонимаю?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39788394
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё это на DXE10.2
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39788456
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUS,

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

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

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

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

Кстати, "MyNumber" вообще говоря на практике может быть без кавычек (по исходному смыслу Java Script Object) и многиe библиотеки такое читают
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39788457
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а строка, которая МОЖЕТ интерпретироваться, как дата, перестаёт от этого быть строкой?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39788499
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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

вот тут как раз "веселье"((
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39788509
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUSИНН - вообще то это строка в виде чисел! но не как не целое число

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

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

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

поэтому твоей программе отдают и как строку и как число, а ты уж сам смотри, что тебе нужнее
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39788513
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не вижу веселья. Ты же знаешь, что в \том ключе должно быть, строка или число, так и читай.

тут и то интереснее: http://forum.codenet.ru/q73936/Хитроумный TJSONNumber: как определиться с Integer или Float?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39788546
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochкак json-библиотека определит, что тут число-не-строка или строка-не-число?
никак.
не несите чушь, определит согласно стандарта

Ariochтут и то интереснее: http://forum.codenet.ru/q73936/Хитроумный TJSONNumber: как определиться с Integer или Float?
ничего интересного, даже стандарт можно не читать, достаточно посетить json.org
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39788549
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все реальные json-документы до буквы соответсвуют последней версии стандарта?

посетить json.org - это один из способов прочитать стандарт
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39788608
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochвсе реальные json-документы до буквы соответсвуют последней версии стандарта?
Косячить в крови людей. Простота JSON обманчива ....
1) Зачастую люди не понимают природу JSON и далее лепят одноименные элементы в объектах, безименные подобъекты в объектах, ссылки по каким-то именам и тд.
2) Сплошь и рядом русские буквы как есть.
3) Местами все идет без кавычек.

Ну теперь либо JSON либо не-JSON. С не-JSON хоть ИНН хоть что будет работать с или без кавычек и в любой кодировке, хоть 3х битной :)
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39788737
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry ArefievAriochвсе реальные json-документы до буквы соответсвуют последней версии стандарта?
Косячить в крови людей. Простота JSON обманчива ....
1) Зачастую люди не понимают природу JSON и далее лепят одноименные элементы в объектах, безименные подобъекты в объектах, ссылки по каким-то именам и тд.
2) Сплошь и рядом русские буквы как есть.
3) Местами все идет без кавычек.

IMHO большинство воспринимают и используют JSON просто как упрощенный заменитель XML, при этом никакого отношения к Яве не имеющий.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39788896
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот к Яве он точно отнощшения никогда не имел
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39788901
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochВот к Яве он точно отнощшения никогда не имел
всмысле?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39788916
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в прямом
какоe отношение JSON имеет к Яве ?


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

т.е. типа как он имеет отноiение, но мужики-то не знают
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39789401
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгенийвсмысле?
Капитан Очевидность поясняет: Arioch апеллирует к распространенной ошибке смешивания Java и JavaScript
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39789469
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это ни одно и то же?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39789592
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев ЕвгенийА это ни одно и то же?
Нет. Java представляет собой объектно-ориентированный язык программирования, а JavaScript - это объектно-ориентированный язык создания сценариев. Код на Java необходимо скомпилировать, а код JavaScript используется в текстовом виде.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39789593
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это четыре разных человека. (c)
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39789597
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldmi45,

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

Дело в том, что "Java" в названии JavaScript - чисто рекламная фишка, совместна рекламная кампания ныне не существующих Netscape и Sun, без малейшего технического к тому повода. Netscape заплатил за использованиe хайпа Sun.
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39789645
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений,

канал и канализация одно и то же? :)
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39789651
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это связанные понятия

канализация - система подземных каналов для отвода ненужных жидкостей не куда им хочется, а куда хочется строителям каналов
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39789656
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но я думаю, это был сарказм и троллинг

Дегтярев ЕвгенийА это ни одно и то же?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39789720
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochНо я думаю, это был сарказм и троллинг
зачем вы так, у меня мир рушится...
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39789722
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldmi45Нет. Java представляет собой объектно-ориентированный язык программирования, а JavaScript - это объектно-ориентированный язык создания сценариев. Код на Java необходимо скомпилировать, а код JavaScript используется в текстовом виде.
а как же жит-компиляция в в8?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39789745
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

ну так и жавай с js связана :) буквы одинаковые, как минимум
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39790004
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon,

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

но мы на техническом форуме и предполагаем техническую связь из области программирования
её нет
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39790007
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев ЕвгенийAriochНо я думаю, это был сарказм и троллинг
зачем вы так, у меня мир рушится...

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

Вставай, проклятьем заклеймённый!
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39790022
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аллилуя, братья!

...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39790759
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите разобраться с ещё одним моментом.

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

Что имею ввиду:
Код: pascal
1.
2.
3.
4.
5.
  // Создаём нужный объект.
  JSONObj := TJSONObject.Create;
  ...
  JSONObj.AddPair(TJSONPair.Create('TestParam', TJSONArray.Create(["Тест 1","Тест2","Тест3"...""])));
  
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39790766
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUSКак можно в Объект засунуть собранный массив?

Сам же написал ответ, или нет ?
Если нет, то первая же ссылка в этой теме ?
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39790771
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valery_BИгорь_UUSКак можно в Объект засунуть собранный массив?

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

В тот то и дело, не компилиться!
...
Рейтинг: 0 / 0
Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
    #39790785
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался сам...

Код: pascal
1.
(TJSONObject.ParseJSONValue('["Тест1","тест2","Тест3"]')) AS TJSONArray)
...
Рейтинг: 0 / 0
114 сообщений из 114, показаны все 5 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]