Здравствуйте, я получаю следующий результат в веб-API в формате JSON:Прочитайте конкретное значение из запроса JSON с помощью надобъекта
[
{
"$id":"47",
"CodISO":"BIH",
"ES":"Bosnia y Herzegovina",
"EN":"Bosnia and Herzegovina"
},
{
"$id":"48",
"CodISO":"BLR",
"ES":"Bielorrusia",
"EN":"Belarus"
},
{
"$id":"49",
"CodISO":"BLZ",
"ES":"Belice",
"EN":"Belize"
},
{
"$id":"50",
"CodISO":"BOL",
"ES":"Bolivia",
"EN":"Bolivia"
},
{
"$id":"51",
"CodISO":"BON",
"ES":"Bonaire",
"EN":"Bonaire"
},
{
"$id":"52",
"CodISO":"BOT",
"ES":"Botsuana",
"EN":"Botswana"
},
{
"$id":"53",
"CodISO":"BRA",
"ES":"Brasil",
"EN":"Brazil"
},
{
"$id":"54",
"CodISO":"BRB",
"ES":"Barbados",
"EN":"Barbados"
}
]
Теперь я хочу прочитать значение из пункта «ES», где значение item 'CodISO' = 'BOL' в Delphi SuperObject, я не могу найти решение, весь день пробовал его.
Я не знаю, как итерация с элементами SuperObject, как я делаю это с Embarcadero TJSONValue
, TJSONObject
, TJSONArray
. Я новичок с надобъекта:
var
json: ISuperObject;
Retriever: TIdHTTP;
Url: string;
AnsiStr: AnsiString;
begin
URL := Form1.RestClient1.BaseURL;
try
Retriever := TIdHTTP.Create(nil);
try
AnsiStr := Retriever.Get(Url);
json := SO(AnsiStr);
{ Here code to iterate with json elements in SuperObject.......
.
.
.
.
}
finally
Retriever.Free;
end;
except
on E: Exception do
ShowMessage(E.ClassName + ': ' + E.Message);
end;
End;
«Я не в состоянии найти решение, взял весь день, пытаясь его» - что именно вы пробовали? Пожалуйста, покажите свой код. Это не должно занимать больше нескольких минут, если вы действительно посмотрите на доступный API SuperObject. JSON не имеет ничего подобного XPath для XML, поэтому вам нужно итерировать элементы вручную. Начиная с корневого массива, вы пробиваете элементы массива по одному за раз, читая поля 'CodISO' и' ES' по мере необходимости, а затем разбиваете цикл, когда найдете совпадение. Просто как тот. –
Вы посмотрели [readme.html] (https://superobject.googlecode.com/git/readme.html) суперобъекта? Это намерение файла readme, вы должны прочитать, чтобы получить дополнительную информацию –