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

如何用Delphi的TJsonTextWriter生成带嵌套结构的目标JSON

Delphi生成含嵌套数组的指定JSON结构补全方案

目标JSON结构

[{
    "trans_num" : "00001",
    "cust_name" : "Sample Customer Name",
    "remarks" : "",
    "details":
    [
        {
        "itemcode" : "ITM0001",
        "quantity" : 1
        },
        {
        "itemcode" : "ITM0002",
        "quantity" : 1
        }
    ]
}]

原始未完成代码

uses System.JSON, System.JSON.Types, JSON.Writers;

procedure TFrm_Main.cmdReaderClick(Sender: TObject);
var
    Writer: TJsonTextWriter;
    StringWriter: TStringWriter;
begin
    StringWriter := TStringWriter.Create();
    Writer := TJsonTextWriter.Create(StringWriter);
    Writer.Formatting := TJsonFormatting.Indented;

      Writer.WriteStartArray;
        Writer.WriteStartObject;
            Writer.WritePropertyName('trans_num');
            Writer.WriteValue('0001');
            Writer.WritePropertyName('cust_name');
            Writer.WriteValue('Sample Customer Name');
            Writer.WritePropertyName('remarks');
            Writer.WriteValue('Confirmed');

        Writer.WriteEndObject;
      Writer.WriteEndArray;

    ShowMessage(StringWriter.ToString);
end;

补全后的代码

uses System.JSON, System.JSON.Types, JSON.Writers;

procedure TFrm_Main.cmdReaderClick(Sender: TObject);
var
    Writer: TJsonTextWriter;
    StringWriter: TStringWriter;
begin
    StringWriter := TStringWriter.Create();
    Writer := TJsonTextWriter.Create(StringWriter);
    Writer.Formatting := TJsonFormatting.Indented;

    Writer.WriteStartArray;
    Writer.WriteStartObject;
        // 修正trans_num为目标值
        Writer.WritePropertyName('trans_num');
        Writer.WriteValue('00001');
        Writer.WritePropertyName('cust_name');
        Writer.WriteValue('Sample Customer Name');
        // 修正remarks为空字符串
        Writer.WritePropertyName('remarks');
        Writer.WriteValue('');

        // 写入details嵌套数组
        Writer.WritePropertyName('details');
        Writer.WriteStartArray;
            // 第一个明细项
            Writer.WriteStartObject;
                Writer.WritePropertyName('itemcode');
                Writer.WriteValue('ITM0001');
                Writer.WritePropertyName('quantity');
                Writer.WriteValue(1);
            Writer.WriteEndObject;
            // 第二个明细项
            Writer.WriteStartObject;
                Writer.WritePropertyName('itemcode');
                Writer.WriteValue('ITM0002');
                Writer.WritePropertyName('quantity');
                Writer.WriteValue(1);
            Writer.WriteEndObject;
        Writer.WriteEndArray;
    Writer.WriteEndObject;
    Writer.WriteEndArray;

    ShowMessage(StringWriter.ToString);
end;

关键修改说明

  • 修正trans_num的值为00001,匹配目标结构
  • 将remarks的值改为空字符串""
  • 新增details嵌套数组的写入逻辑:先声明属性名,再开启数组,依次写入两个明细对象,最后结束数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:37:17