Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2016, 12:09   #1
Skynet_07
 
Регистрация: 05.05.2016
Сообщений: 3
По умолчанию Работа с DBXJSON

Здравствуйте!
У кого-то есть какая-то ссылка или книга, где есть описание всех методов?
Сам найти ничего не могу. Только понаходил кучу примеров, где оно используется, но мне тех примеров недостаточно. Надо бы описания методов. Что принимает, что возвращает, как работает и т.д.
Или если кто знает, то подскажите, как распознать вложенный объект.
У меня есть файл в формате JSON. Вот такой (это пока я учусь. Потом буду работать очень огромными файлами с очень большой вложенностью):

Код:
{
  "username": "thomas",
  "name": "Thomas",
  "photos": [
    {
      "title": "Photo 1",
      "urls": {
        "small": "http://example.com/photo1_small.jpg",
        "large": "http://example.com/photo1_large.jpg"
      }
    },
    {
      "title": "Photo 2",
      "urls": {
        "small": "http://example.com/photo2_small.jpg",
        "large": "http://example.com/photo2_large.jpg"
      }
    }
  ],
  "int_list": [
    1,
    2,
    3
  ]
}
Код:
uses DBXJSON

...............
...............
...............

procedure TForm1.Button1Click(Sender: TObject);

var
  JsonObj, JsonObj2: TJSONObject;
  name, id1, id2: string;
  temp, t1, tval: TJSONValue;
  tArr: TJSONArray;

begin
  AJsonString := Memo.Lines.Text;
  temp := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(AJsonString), 0);
  JsonObj := temp as TJSONObject;
  try
    if Assigned(JsonObj) then
    begin
      
      name := JsonObj.Get(1).JsonValue.Value; // с чтением самих значений проблем нет
      t1 := JsonObj.Get(2).JsonValue;

      if t1 is TJSONArray then
        ShowMessage('массив!'); // с распознаванием массивов проблем так же нет

      tArr := t1 as TJSONArray;
      tval := tArr.Get(0);
      JsonObj := tval as TJSONObject;

      id1 := JsonObj.Get(0).JsonValue.Value; // читаю ПРОСТЫЕ значения с массива. тут тоже все хорошо.

//выше я получил значение "title" 0-го элемента массива "photos"
//вопрос как получить "urls" в виде TJSONObject?
//нужно сделать по аналогии с распознаванием массива
//т.е. что-то похоже на  if t1 is TJSONArray then...
//если сразу преобразовать, т.е. JSonObj2 := JsonObj.Get(0).JsonValue;
//(без '.Value') и обращаться потом JsonObj2.Get(0).JsonValue.Value;
//то все работает. но это если я четко укажу, что читать надо
//как объект, а не как значение. но это я знаю структуру файла
//и точно знаю, что там вложенное значение.
//а файл может быть любой структуры и нужно вложенность распознавать
//надо что-то вроде if t1 is TJSONArray then только для распознавания
//объекта, а не массива.

     
    end
    else
      ShowMessage('Некорректная структура данных');
  finally
    JsonObj.Free; // не забываем чистить за собой
  end;

end;
В принципе суть проблемы изложена в комментариях. Буду благодарен за помощь, но все же более в тему было бы найти описание всех методов файлика DBXJSON, чтоб впредь я мог разбираться с этим сам
Заранее благодарен)
Skynet_07 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с ems api: корректная работа только при явном указании города mrdemkin JavaScript, Ajax 3 02.03.2015 18:23
DBXJSON. Получает кодированную строчку Lardes Общие вопросы Delphi 3 14.05.2013 11:50
JSON и DBXJSON (Delphi XE3) Lardes Общие вопросы Delphi 3 12.03.2013 11:26
Работа с webbrowser - Фреймы, работа с конкретным феймом в фрейме NewDelphi Фриланс 2 08.10.2009 11:00