Получить подчинённый узел в JSON

X11
Дата: 06.08.2019 13:17:43
Напишу сразу, чтобы не было флуда, использую стандартный TJSONObject. Просьба не тратить время на написание примеров, советов для других библиотек. Ну т.е. тот JSONObject использую, что идёт искаропки в Delphi Tokyo.
Да, я знаю, что в других библиотеках может быть проще. А может быть и в стандартной так можно, как я хочу.

Итак. Есть JSON строка, как на картинке для наглядности.
На данный момент, у меня получается говнокод, который сперва получаю TJsonValue, потом TJSONObject для всей строки, т.е. общий JSON-объект, потом всякие проверки. Затем то же самое узла "result", потом всякие проверки. Потом то же самое нужно сделать для узла "ad_parameters" ну и дальше уже цикл по массиву. Могу показать, но страшно )))

А нельзя ли это всё превратить в одну строку типа

const 
 sJSON = 'здесь JSON-строка';
var
 JSONParamsVal: TJSONValue;
 JSONArray: TJSONArray;
begin
  JSONParamsVal := TJSONObject.ParseJSONValue(sJSON).Get('result').Get('ad_parameters');

  if JSONParamsVal is TJSONArray then
    JSONArray := TJSONArray(JSONParamsVal);

...
...
ёёёёё
Дата: 06.08.2019 13:58:23
X11,

сразу же советую переходить на superobject, дальше все одной строкой делается.
_Vasilisk_
Дата: 06.08.2019 15:50:48
var
  LStr: string;
  LVal: TJSONValue;
  LData: TJSONArray;
begin
  LStr := '{"result":{"ad_parameters": [1, 2, 3]}}';
  LVal := TJSONObject.ParseJSONValue(LStr, True, True);
  try
    LData := LVal.GetValue<TJSONArray>('result.ad_parameters');
  finally
    LVal.Free;
  end;
end;
X11
Дата: 06.08.2019 16:18:51
_Vasilisk_, Картинка с другого сайта. просто супер. Спасиб!
X11
Дата: 06.08.2019 16:24:05
Странно, что я никогда в примерах и справках не видел, что так реально можно.Картинка с другого сайта.
_Vasilisk_
Дата: 06.08.2019 16:46:14
X11
Странно, что я никогда в примерах и справках не видел, что так реально можно.Картинка с другого сайта.
Я тоже. Но я исходил из теории, что так можно. Открыл исходники и посмотрел. Зацепился за имя параметра APath у GetValue. Прочитал в хелпе его формат
X11
Дата: 07.08.2019 11:50:58
Что не так?
 LData: TJSONArray;
 JSONPair: TJSONPair;
begin

  for JSONPair in LData do


Incompatible types: 'TJSONPair' and 'TJSONValue'


Как правильно сделать цикл по TJSONArray?
X11
Дата: 07.08.2019 11:56:32
Нужно объявить JSONPair как TJSONValue
s62
Дата: 07.08.2019 13:14:46
X11,
Дерево и его узлы - это в XML. В JSON (JavaScript Object Notation) - объекты и их свойства, массивы и их элементы. В том числе, само собой - вложенные объекты. Мне кажется, если это понимать, то какие-то вопросы решаются. Объект состояит из пар - имя-значение.
JSON
Объект - неупорядоченный набор пар ключ/значение. Объект начинается с {открывающей фигурной скобки и заканчивается }закрывающей фигурной скобкой.

https://www.json.org/json-ru.html
Массив - из элементов.
JSON
Массив - упорядоченная коллекция значений. Массив начинается с [открывающей квадратной скобки и заканчивается ]закрывающей квадратной скобкой.

Чем является этот элемент массива или значение пары в объекте - объектом, массивом или чем-то еще - это уже другое дело.
Исходя из этого, получается и ответ на ваш вопрос.
s62
Дата: 07.08.2019 13:22:06
s62,
я написал, что массив состоит из элементов, для вопроса "Как правильно сделать цикл по TJSONArray? " важней наверное, что каждый элемент это значение (а не пара), как написано в процитированном мной определении с сайта JSON.