powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
25 сообщений из 114, страница 2 из 5
Посоветуйте лучшую по Вашему мнению библиотеку для работы с 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
25 сообщений из 114, страница 2 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Посоветуйте лучшую по Вашему мнению библиотеку для работы с json
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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