Расшифруйте JSON с помощью UJSON для Delphi - PullRequest
1 голос
/ 19 июня 2019

У меня есть файл JSON, который выглядит следующим образом, и я пытаюсь его декодировать, но безуспешно:

[
  {
    "FirstName": "Kim",
    "Surname": "Jensen"
  },
  {
    "FirstName": "Amery",
    "Surname": "Mcmillan"
  },
  {
    "FirstName": "Denton",
    "Surname": "Burnett"
  }
  ...
]

Используя uJson с Delphi 2007, я знаю, как извлечь данные, когдаУ массива есть такое имя:

{
  "Names": [
    {
      "FirstName": "Kim",
      "Surname": "Jensen"
    },
    {
      "FirstName": "Amery",
      "Surname": "Mcmillan"
    },
    {
      "FirstName": "Denton",
      "Surname": "Burnett"
    }
    ...
  ]
}
var
  json: TJSONObject;
  Text: String;
  i: Integer;
begin
  json := TJSONObject.create(jsontext);

  for i:=0 to json.getJSONArray('Names').Length -1 do
  begin
    Text := json.getJSONArray('Names').getJSONObject(i).optString('FirstName');
    ...
  end;
end;

Но у этого массива нет имени, и я перепробовал почти все, что мог придумать, и все же эта простая вещь заняла у меня часы, чтобы понять.

1 Ответ

7 голосов
/ 19 июня 2019

В JSON, с которым у вас возникли проблемы, данные верхнего уровня - это массив, поэтому вам нужно проанализировать его, используя TJSONArray вместо TJSONObject.

var
  json: TJSONArray;
  Text: String;
  i: Integer;
begin
  json := TJSONArray.create(jsontext);
  try
    for i := 0 to json.Length-1 do
    begin
      Text := json.getJSONObject(i).optString('FirstName');
      ...
    end;
  finally
    json.Free;
  end;
end;
...