Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Обработка JSON в Delphi: проверка ключа `error` для условного выполнения действий

Delphi , Синтаксис , Массивы

Обработка JSON в Delphi: проверка ключа error для условного выполнения действий

При работе с JSON в Delphi часто возникает необходимость проверки наличия определённых ключей. В данном примере рассматривается задача проверки наличия ключа error в JSON-объекте для условного выполнения действий в цикле.

Проблема

Пользователь столкнулся с необходимостью проверить, содержит ли текущий объект JSON ключ error. Если ключ присутствует, программа должна пропустить текущий объект (используя continue), а если его нет — продолжить обработку.

Пример JSON

Вот пример JSON, с которым пользователь работает:

[
    {
        "cenario": {
            "origem": "",
            "out": "SNC",
            "country": ""
        },
        "item": "0015963",
        "cod": "17894904009319",
        "nat_rec": null
    },
    {
        "item": "0012868",
        "error": "product unavailable",
        "status": "unavailable"
    }
]

Неудачная попытка решения

Пользователь пытался использовать методы FindValue и TryGetValue для поиска ключа error, но столкнулся с проблемами:

jValue.FindValue('error') // Поиск по всему массиву.
jValue.TryGetValue('error', jArray) // Прерывание программы, если ключ не найден в текущем объекте.

Решение

Проблема в том, что jValue указывает на TJSONArray, и вызов TryGetValue('error') пытается найти поле error непосредственно в массиве, что некорректно. Вместо этого нужно обращаться к каждому объекту в массиве отдельно:

response := IdHTTP.Get(url);
try
  jValue := TJsonObject.ParseJSONValue(response);
  jArray := jValue as TJSONArray;
  for x := 0 to jArray.Count-1 do
  begin
    jObj := jArray[x] as TJSONObject;
    if jObj.GetValue('error') = nil then
    begin
      // Ключ 'error' отсутствует, выполняем необходимые действия.
      Memo.Lines.Add('cod_item :' + jObj.GetValue('item').Value);
      Memo.Lines.Add('cod: ' + jObj.GetValue('cod').Value);
    end;
  end;
finally
  jValue.Free;
end;

Альтернативный подход

Также можно использовать метод FindValue, указывая индекс объекта в массиве:

response := IdHTTP.Get(url);
try
  jValue := TJsonObject.ParseJSONValue(response);
  jArray := jValue as TJSONArray;
  for x := 0 to jArray.Count-1 do
  begin
    if jArray.FindValue('['+IntToStr(x)+'].error') = nil then
      continue;
    // Ключ 'error' присутствует, пропускаем текущий объект.
  end;
  Memo.Lines.Add('cod_item :' + jArray.GetValue<string>('['+IntToStr(x)+'].item'));
  Memo.Lines.Add('cod: ' + jArray.GetValue<string>('['+IntToStr(x)+'].cod'));
end;
finally
  jValue.Free;
end;

Важные замечания

  • При работе с TJSONArray необходимо обращаться к каждому объекту массива отдельно.
  • Использование методов GetValue и FindValue с указанием индекса позволяет корректно проверить наличие ключа в каждом объекте массива.
  • При использовании исключений для проверки наличия значения, можно использовать более лёгкие альтернативы, такие как TJSONObject.Get() или TJONObject.Pairs[], чтобы избежать накладных расходов на обработку исключений.

Эти рекомендации помогут разработчикам избежать типичных ошибок при работе с JSON в Delphi и обеспечат корректную обработку JSON-данных.

Создано по материалам из источника по ссылке.

При работе с JSON в Delphi необходимо обращаться к каждому объекту в массиве отдельно для проверки наличия определенных ключей, таких как `error`, чтобы корректно обрабатывать условные действия в цикле.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Массивы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-14 10:35:15/0.0034410953521729/0