-1

こんにちは、JSON 形式の Web API で次の結果を取得します。

[
   {
      "$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"
   }
]

さて、Delphi SuperObject で項目 'CodISO' = 'BOL' の値である項目 'ES' から値を読み取りたいのですが、解決策を見つけることができず、一日中試してみました。

TJSONValueEmbarcaderoで行っているようにTJSONObject、SuperObject 要素をどのように反復するかわかりませんTJSONArray。私は SuperObject の初心者です。

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;
4

1 に答える 1

1

Rufo 卿が言ったように、 SuperObject のドキュメントを読む必要があります。

次のようなことを試してください:

var
  JsonArr, JsonObj: ISuperObject;
  Retriever: TIdHTTP;
  Url, JsonStr, ES: string;
  I: Integer;
begin
  URL := Form1.RestClient1.BaseURL;
  try
    Retriever := TIdHTTP.Create(nil);
    try
      JsonStr := Retriever.Get(Url);
    finally
      Retriever.Free;
    end;
    JsonArr := SO(JsonStr).AsArray; 
    for I := 0 to JsonArr.Length-1 do
    begin
      JsonObj := JsonArr.O[I];
      if JsonObj.S['CodISO'] = 'BOL' then
      begin
        ES := JsonObj.S['ES'];
        Break;
      end;
    end;
  except
    on E: Exception do
      ShowMessage(E.ClassName + ': ' + E.Message);
  end;
end;
于 2014-11-24T05:25:56.457 に答える