У меня есть файл 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;
Но у этого массива нет имени, и я перепробовал почти все, что мог придумать, и все же эта простая вещь заняла у меня несколько часов, чтобы понять.
Возможный дубликат Delphi анализирует массив или массив JSON
В 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;
По какой-то причине я всегда думал, что мне нужно сначала добавить его к объекту, прежде чем я смогу получить к нему доступ. Спасибо, Реми.
См. Получить xsuperobject для анализа безымянного массива в структуру объекта