delphi 如何解析嵌套JSON?

hmtdttj4  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(439)

如何解析这个JSON?

{
  "result": [
    {
      "animals": [
        {
          "id": 1,
          "name": "pig",
        }
      ]
    }
  ]
}

我尝试通过以下方式解析JSON:

jsonobject := TJsonObject.ParseJSONValue(RestResponse.Content) as TJsonObject;

然后我得到了"animals":[{"id" ...。现在它变得复杂了,我如何进一步解析得到idname?进一步解析JSON还是解析JSON数组?有人能帮我(* 用示例代码 *)吗?

9vw9lbht

9vw9lbht1#

你的JSON字符串包含一个嵌入在另一个数组中的数组。你可以获取第一个数组的值(“result”)并迭代它的元素。对于每个元素,你都有一个“animals”数组,你可以迭代它来获取“id”和“name”。
简单的代码可以做到这一点:

const
    JSONStr2 =
'{' +
   '"result": [' +
     '{' +
       '"animals": [' +
         '{"id": 1, "name": "pig"},' +
         '{"id": 2, "name": "rabit"}' +
       ']' +
     '}' +
   ']' +
 '}';

 procedure TForm1.ButtonClick(Sender: TObject);
var
    JSONValue      : TJSONValue;
    JSONResult     : TJSONArray;
    JSONResultItem : TJSONValue;
    JSONAnimals    : TJSONArray;
    JSONAnimalItem : TJSONValue;
begin
    JSONValue := TJSONObject.ParseJSONValue(JSONStr);
    if not Assigned(JSONValue) then begin
        ShowMessage('JSON syntax error');
        Exit;
    end;
    try
        JSONResult := JSONValue.GetValue<TJSONArray>('result');
        for JSONResultItem in JSONResult do begin
            JSonAnimals := JSONResultItem.GetValue<TJSONArray>('animals');
            for JSONAnimalItem in JSONAnimals do begin
                Memo1.Lines.Add(Format('%s = %s',
                                       [JSONAnimalItem.GetValue<String>('id'),
                                        JSONAnimalItem.GetValue<String>('name')]));
            end;
        end;
    finally
        JSONValue.Free;
    end;
end;

相关问题