如何在Delphi中计算JSON数组中的元素数

时间:2019-05-18 13:04:47

标签: arrays json delphi count

我正在使用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;

1 个答案:

答案 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;