fpjson имя ключа содержит точку

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

fpjson имя ключа содержит точку

Сообщение lodka » 02.09.2021 11:31:43

Добрый день!

Работаю с json при помощи fpjson. Как взять значение ключа, если имя ключа содержит точку?

Код: Выделить всё
{
    "pp": "8f49ff23",
    "ars": {
        "attach.id": "468"
     }
}


JSONData.FindPath('attach.id'); будет искать вложенный в attach ключ id
lodka
новенький
 
Сообщения: 18
Зарегистрирован: 22.06.2021 05:15:27

Re: fpjson имя ключа содержит точку

Сообщение sts » 02.09.2021 13:52:25

JSONData.FindPath('"attach.id"') ?
нет возможности проверить
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: fpjson имя ключа содержит точку

Сообщение lodka » 02.09.2021 14:13:33

Пробовал, не находит.
lodka
новенький
 
Сообщения: 18
Зарегистрирован: 22.06.2021 05:15:27

Re: fpjson имя ключа содержит точку

Сообщение iskander » 02.09.2021 16:09:32

lodka писал(а):Работаю с json при помощи fpjson. Как взять значение ключа, если имя ключа содержит точку?

Имхо чисто с помощью FindPath() никак, во всяком случае, в текущем состоянии FpJson.
Как-нибудь костыльно
Код: Выделить всё
  Found := JsonData.FindPath('ars');
  if (Found <> nil) and (Found.JSONType = jtObject) then
    Found := TJsonObject(Found).Find('attach.id');

Или наваять собственную функцию
Код: Выделить всё
  FpJsonFindPath(Root: TJsonData; Path: array of string; out Value: TJsonData): Boolean;
  begin
    ...
  end;
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

Re: fpjson имя ключа содержит точку

Сообщение sts » 02.09.2021 19:12:22

с годик назад по либе вопросы поднимали на форуме, я посмотрел исходники - там все переписывать надо, что я и сделал для проверки, но в "нормализованном" виде она теряет обратную совместимость.
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: fpjson имя ключа содержит точку

Сообщение iskander » 02.09.2021 19:50:07

sts писал(а):с годик назад по либе вопросы поднимали на форуме, я посмотрел исходники - там все переписывать надо, что я и сделал для проверки...

Только для себя, или это можно где-то увидеть и попробовать?
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

Re: fpjson имя ключа содержит точку

Сообщение lodka » 03.09.2021 06:08:55

1. Как вывести имена ключей средствами fpjson?
2. Какие библиотеки используете вы для для работы с json?
lodka
новенький
 
Сообщения: 18
Зарегистрирован: 22.06.2021 05:15:27

Re: fpjson имя ключа содержит точку

Сообщение sts » 03.09.2021 10:17:49

iskander писал(а):Только для себя, или это можно где-то увидеть и попробовать?

доступа к компу где делал не имею ща, за выходные попробую нарыть исходники
lodka писал(а): Какие библиотеки используете вы для для работы с json?

на делфе superobject.pas - она на интерфейсах, json\xml, в принципе - медленная, по идее fpjson быстрее и меньше памяти жрет
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: fpjson имя ключа содержит точку

Сообщение iskander » 03.09.2021 10:54:55

lodka писал(а):1. Как вывести имена ключей средствами fpjson?
2. Какие библиотеки используете вы для для работы с json?

1. Если я правильно путаю и требуются значения ключей в объекте
Код: Выделить всё
program get_obj_keys;
{$mode objfpc}
uses
  SysUtils, FpJson;
var
  e: TJsonEnum;
  I: Integer;
  d: TJsonData;
begin
  d := TJsonObject.Create(['key.1', 100, 'key.2', 200, 'key.3', 300]);
  WriteLn('first way:');
  for e in d do
    WriteLn(e.Key);
  WriteLn('second way:');
  for I := 0 to d.Count - 1 do
    WriteLn(TJsonObject(d).Names[I]);
  d.Free;
end.   

Кстати, FpJson имеет весьма обширную справку.

2. FpJson, конечно, изрядно неуклюжий и местами косячный, зато всегда доступен в актуальном состоянии.
Из сторонних, возможно, самая компактная реализация это JsonTools.
Вероятно, самый строгий парсер у lgJson
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

Re: fpjson имя ключа содержит точку

Сообщение lodka » 03.09.2021 11:24:38

Спасибо!
lodka
новенький
 
Сообщения: 18
Зарегистрирован: 22.06.2021 05:15:27


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

Рейтинг@Mail.ru