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


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