Декодировать json с помощью uJson для delphi

У меня есть файл 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;

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

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
2
556
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

По какой-то причине я всегда думал, что мне нужно сначала добавить его к объекту, прежде чем я смогу получить к нему доступ. Спасибо, Реми.

Kim HJ 19.06.2019 22:32

Другие вопросы по теме