我正在使用Delphi(使用REST组件和Google Books的API)访问TJSONValue。我想知道数组中有多少个元素:“ items”。 这是JSONValue的格式:
"kind": "books#volumes", "totalItems": 221, "items": [ {...}, {...}, {...}]
注意*“ totalItems”不涉及数组的大小。
我已经尝试过这种方法,但是会引起转换错误。
var
JSONBook: TJSONValue;
CountItems: integer;
begin
JSONBook := RESTResponse1.JSONValue;
ShowMessage(IntToStr(JSONBook.GetValue<string>('items').Length));
CountItems := JSONBook.GetValue<string>('items').Length;
for i := 0 to CountItems-1 do
begin
...
end;
end;
答案 0 :(得分:4)
items
字段是一个数组,因此将其作为string
检索是错误的,因此通过字符串长度读取数组计数是行不通的。
尝试以下方法:
uses
..., System.JSON;
var
JSONBook, JSONItem: TJSONObject;
JSONItems: TJSONArray;
CountItems: integer;
begin
JSONBook := RESTResponse1.JSONValue as TJSONObject;
JSONItems := JSONBook.GetValue('items') as TJSONArray;
CountItems := JSONItems.Count;
ShowMessage(IntToStr(CountItems));
for i := 0 to CountItems-1 do
begin
JSONItem := JSONItems.Items[i] as TJSONObject;
...
end;
end;