使用uJson for Delphi解码json

时间:2019-06-19 19:21:17

标签: json delphi delphi-2007 ujson

我有一个看起来像这样的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 个答案:

答案 0 :(得分:7)

在您遇到麻烦的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;