json - 使用uJson for Delphi解码json

标签 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;

但是,这个数组没有名字,我已经尝试了几乎所有我能想到的东西,但是这个简单的事情却花了我几个小时才能弄清楚。

最佳答案

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

关于json - 使用uJson for Delphi解码json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56674535/

相关文章:

delphi - WM_NCHITTEST 不适用于 WS_EX_LAYERED 形式

Delphi:将 rtf 转换为文本的最佳方法

c++ - 我想在 Delphi/WIN32 中使用 Infocardapi.dll 但想要它的头文件

javascript - 比较包含数组的对象属性以找出差异

delphi - CreateProcessAsUser 如何添加权限?

Java - 如何对java对象进行Gzip压缩

delphi - 如何获取有关计算机的信息? [32位或64位]

arrays - 在将动态数组作为变量参数传递之前是否可以强制转换?

python - 如何从Python中的特定键获取特定值

json - Moxy、JSON 和 Jersey 2.0 不会反序列化纯字符串数组