如何用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
相关产品推荐
相关产品推荐

