Delphi 10 将Json中的数组转换成ClientDataSet数据集  
官方Delphi 学习QQ群: 682628230(三千人)
频道

Delphi 10 将Json中的数组转换成ClientDataSet数据集


1、Json文本:


{"infcode":"0","inf_refmsgid":"320000202107071540300000539098","refmsg_time":"20210707154030082","respond_time":"20210707154030221","enctype":"","signtype":"","err_msg":null,"output":{"idetinfo":[],"baseinfo":{"certno":"321321198808030019","psn_no":"32130000000000006000157447","gend":"1","brdy":"1988-08-03","naty":"01","psn_cert_type":"01","psn_name":"韩科","age":30.2},"insuinfo":[{"insuplc_admdvs":"321311","psn_insu_date":"2010-04-01","cvlserv_flag":"0","balc":4.15,"emp_name":"个体单位321311","psn_type":"1103","psn_insu_stas":"2","insutype":"310","paus_insu_date":"2016-11-01"},{"insuplc_admdvs":"321311","psn_insu_date":"2010-04-01","cvlserv_flag":"0","balc":0,"emp_name":"个体单位321311","psn_type":"1103","psn_insu_stas":"2","insutype":"330","paus_insu_date":"2016-11-01"},{"insuplc_admdvs":"321311","psn_insu_date":"2010-04-01","cvlserv_flag":"0","balc":0,"emp_name":"个体单位321311","psn_type":"1103","psn_insu_stas":"2","insutype":"510","paus_insu_date":"2016-11-01"},{"insuplc_admdvs":"321399","psn_insu_date":"2010-01-01","cvlserv_flag":"0","balc":0,"emp_name":"顺河街道","psn_type":"1501","psn_insu_stas":"1","insutype":"390","paus_insu_date":null}]}}


 


2、转换代码


procedure TForm2.FormShow(Sender: TObject);

var Jobj,JoOut,JoData: TJSONObject;

JoArry:TJSONArray;

i, J:Integer;

insutype, temp: string;

arr01: array of string;

begin

try

Jobj:= TJSONObject.ParseJSONValue(Memo1.Text) as TJSONObject;



// ShowMessage(Jobj.Get('respond_time').JsonValue.Value);


JoOut:= TJSONObject.ParseJSONValue(Jobj.GetValue('output').ToString) as TJSONObject;


JoArry := JoOut.GetValue('insuinfo') as TJSONArray;



if JoArry.Size <= 0 then

Exit;


myDataSet := TClientDataSet.Create(application);


//创建列名

JoData:= TJSONObject.ParseJSONValue(JoArry.Get(0).ToString) as TJSONObject ;

for i := 0 to JoData.Count - 1 do

begin

myDataSet.FieldDefs.Add(JoData.Get(i).JsonString.Value,ftstring,200);

end;

myDataSet.CreateDataSet; //建立

myDataSet.Active;


//循环数组 绑定数据

for I := 0 to JoArry.Size - 1 do

begin


JoData:= TJSONObject.ParseJSONValue(JoArry.Get(I).ToString) as TJSONObject ;


myDataSet.Edit;

arr01:= nil;

for J := 0 to JoData.Count - 1 do

begin

SetLength(arr01,Length(arr01)+1);

arr01[High(arr01)] := JoData.Get(J).JsonValue.Value;


//根据列名Post数据

myDataSet.FieldByName(JoData.Get(J).JsonString.Value).AsString:= JoData.Get(J).JsonValue.Value;


end;


myDataSet.Post;


end;

finally


end;


end;


3、备注:尽量使用JoData.Get(J).JsonString.Value 不要使用tostring, 不然会多双引号!



推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.065842866897583 seconds