delphi 如何解析嵌套JSON?

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

如何解析这个JSON?

  1. {
  2. "result": [
  3. {
  4. "animals": [
  5. {
  6. "id": 1,
  7. "name": "pig",
  8. }
  9. ]
  10. }
  11. ]
  12. }

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

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

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

9vw9lbht

9vw9lbht1#

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

  1. const
  2. JSONStr2 =
  3. '{' +
  4. '"result": [' +
  5. '{' +
  6. '"animals": [' +
  7. '{"id": 1, "name": "pig"},' +
  8. '{"id": 2, "name": "rabit"}' +
  9. ']' +
  10. '}' +
  11. ']' +
  12. '}';
  13. procedure TForm1.ButtonClick(Sender: TObject);
  14. var
  15. JSONValue : TJSONValue;
  16. JSONResult : TJSONArray;
  17. JSONResultItem : TJSONValue;
  18. JSONAnimals : TJSONArray;
  19. JSONAnimalItem : TJSONValue;
  20. begin
  21. JSONValue := TJSONObject.ParseJSONValue(JSONStr);
  22. if not Assigned(JSONValue) then begin
  23. ShowMessage('JSON syntax error');
  24. Exit;
  25. end;
  26. try
  27. JSONResult := JSONValue.GetValue<TJSONArray>('result');
  28. for JSONResultItem in JSONResult do begin
  29. JSonAnimals := JSONResultItem.GetValue<TJSONArray>('animals');
  30. for JSONAnimalItem in JSONAnimals do begin
  31. Memo1.Lines.Add(Format('%s = %s',
  32. [JSONAnimalItem.GetValue<String>('id'),
  33. JSONAnimalItem.GetValue<String>('name')]));
  34. end;
  35. end;
  36. finally
  37. JSONValue.Free;
  38. end;
  39. end;
展开查看全部

相关问题