You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用System.JSON实现JSON数组嵌套(REST请求场景)

解决System.JSON生成嵌套JSON数组的问题

我学习JSON仅有几天时间,最终目标是生成用于REST请求的JSON结构,要求nested2数组必须嵌套在nested1数组中。

期望的JSON结构

{
  "data": {
    "1": "str",
    "2": "str",
    "3": null,
    "nested1": [{
      "4": 1,
      "5": "str",
      "6": "str",
      "nested2": [{
          "7": "str",
          "8": "str"
        }]     // nested2的闭合括号
     }]        // nested1的闭合括号
  }            // 外层data对象的闭合括号
}

生成的错误JSON结构

{
  "data": {
    "1": "str",
    "2": "str",
    "3": null,
    "nested1": [{
      "4": 1,
      "5": "str",
      "6": "str"
      }],
    "nested2": [{
      "7": "str",
      "8": "str"
      }]
  }
}

要求仅使用System.JSON库解决该问题,以下是我的错误代码:

procedure Tform1.Button1Click(Sender: TObject);
var
 jo1, jo2, jno: TJSONObject;  //jno- 用于嵌套对象
 ja1,ja2: TJSONArray;
 jp: TJSONPair;
begin
 //创建JSON对象'data'
 jo1:= TJSONObject.Create;  jo2:= TJSONObject.Create;
 try
   jp:= TJSONPair.Create('data',jo2);
   jo1.AddPair(jp);

  jo2.AddPair('1',TJSONString.Create('str'));
  jo2.AddPair('2',TJSONString.Create('str'));
  jo2.AddPair('3',TJSONString.Create('str'));

  //创建ja1数组('nested1'),在其中创建空对象并添加嵌套对象(jno)到数组中
  ja1:= TJSONArray.Create;
  ja1.AddElement(TJSONObject.Create);
  jno:=ja1.Items[pred(ja1.Count)] As TJSONObject;
  jno.AddPair('4',TJSONString.Create('str'));
  jno.AddPair('5',TJSONString.Create('str'));
  jno.AddPair('6',TJSONString.Create('str'));

  //将ja1数组添加到jo2中
  jo2.AddPair('nested1',ja1);

  //创建ja2数组('nested2'),创建嵌套对象(jno)并添加到ja2数组中
  ja2:= TJSONArray.Create;
  ja2.AddElement(TJSONObject.Create);
  jno:=ja2.Items[pred(ja2.Count)] As TJSONObject;
  jno.AddPair('7',TJSONString.Create('str'));
  jno.AddPair('8',TJSONString.Create('str'));

  //如何将ja2数组添加到ja1数组中?
  //  jo2.AddPair('nested2',ja2);

  Memo1.Lines.Text:= jo1.ToString;

 finally
  jo1.Free;
end;

正确解决方案及代码

实际上“在数组中添加数组”的表述并不准确,正确步骤为:

  • 创建数组;
  • 创建对象;
  • 将对象添加到数组中;
  • 添加(对象,数组)键值对。
procedure TfGoodsGroups.Button3Click(Sender: TObject);
Var
jo1, jo2, jo3, jno1,jno2: TJSONObject;
ja1,ja2: TJSONArray;
jp: TJSONPair;
begin
//创建JSON对象'data'
jo1:= TJSONObject.Create;  jo2:= TJSONObject.Create;
try
jp:= TJSONPair.Create('data',jo2);
jo1.AddPair(jp);

    jo2.AddPair('1',TJSONString.Create('str'));
    jo2.AddPair('2',TJSONString.Create('str'));
    jo2.AddPair('3',TJSONString.Create('str'));
                
    ja1:= TJSONArray.Create;
    jno1:= TJSONObject.Create;
    ja1.AddElement(jno1);
                
    jno1.AddPair('4',TJSONString.Create('str'));
    jno1.AddPair('5',TJSONString.Create('str'));
    jno1.AddPair('6',TJSONString.Create('str'));
               
    jo2.AddPair('nested1',ja1);
                
    ja2:= TJSONArray.Create;
    jo3:= TJSONObject.Create;
    ja2.AddElement(jo3);
    jo3.AddPair('7',TJSONString.Create('str'));
    jo3.AddPair('8',TJSONString.Create('str'));
                
    jno1.AddPair('nested2',ja2);
                
    Memo1.Lines.Text:= jo1.ToString;
finally
 jo1.Free;
end;
end;

内容的提问来源于stack exchange,提问作者basti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:37:50