TJSONToDataSetBridge
TJSONToDataSetBridge
unit core.dbjson; //cxg 2026 //[{"MenDianBianHao":"8888","MenDianMingCheng":"咏南总店","MenDianLeiXing":"总店"}] interface uses system.json, FireDAC.Comp.Client, Dialogs, DBClient, DB, SysUtils, dbjson; procedure json2dataset(const aJson: string; aDataSet: TDataSet); overload; procedure json2dataset(const aJsonArray: TJSONArray; aDataSet: TDataSet); overload; function dataset2json(aDataSet: TDataSet): string; function dataset2jsonarray(aDataSet: TDataSet): TJSONArray; implementation function dataset2jsonarray(aDataSet: TDataSet): TJSONArray; var Bridge: TDataSetToJSONBridge; begin Bridge := TDataSetToJSONBridge.Create; try Bridge.Dataset := aDataSet; // 替换为实际数据集 Result := TJSONArray(Bridge.Produce); finally Bridge.Free; end; end; function dataset2json(aDataSet: TDataSet): string; var Bridge: TDataSetToJSONBridge; JsonArray: TJSONarray; begin Bridge := TDataSetToJSONBridge.Create; try Bridge.Dataset := aDataSet; // 替换为实际数据集 JsonArray := TJSONarray(Bridge.Produce); Result := UTF8Encode(JsonArray.ToString); finally Bridge.Free; end; end; procedure json2dataset(const aJsonArray: TJSONArray; aDataSet: TDataSet); var JSONValue: TJSONValue; Bridge: TJSONToDataSetBridge; Adaptor: TJSONToDataSetBridge.IAdaptor; begin try JSONValue := TJSONValue(aJsonArray); Bridge := TJSONToDataSetBridge.Create(Adaptor); try // 绑定 FieldDefs 和 DataSet Bridge.FieldDefs := aDataSet.FieldDefs; Bridge.Dataset := aDataSet; // 设置模式(推荐 Rich + ObjectView=False 简单场景) Bridge.TypesMode := TJSONTypesMode.Rich; Bridge.ObjectView := False; // 不展开嵌套(本例无嵌套) // 第一步:定义字段结构 Bridge.Define(JSONValue); if aDataSet is TFDMemTable then TFDMemTable(aDataSet).CreateDataSet; if aDataSet is TClientDataSet then TClientDataSet(aDataSet).CreateDataSet; // 第二步:导入数据 Bridge.Append(JSONValue); aDataSet.Open; finally JSONValue.Free; Bridge.Free; end; except on E: Exception do ShowMessage(E.Message); end; end; procedure json2dataset(const aJson: string; aDataSet: TDataSet); var JSONValue: TJSONValue; Bridge: TJSONToDataSetBridge; Adaptor: TJSONToDataSetBridge.IAdaptor; begin try JSONValue := TJSONObject.ParseJSONValue(aJson); Bridge := TJSONToDataSetBridge.Create(Adaptor); try // 绑定 FieldDefs 和 DataSet Bridge.FieldDefs := aDataSet.FieldDefs; Bridge.Dataset := aDataSet; // 设置模式(推荐 Rich + ObjectView=False 简单场景) Bridge.TypesMode := TJSONTypesMode.Rich; Bridge.ObjectView := False; // 不展开嵌套(本例无嵌套) // 第一步:定义字段结构 Bridge.Define(JSONValue); if aDataSet is TFDMemTable then TFDMemTable(aDataSet).CreateDataSet; if aDataSet is TClientDataSet then TClientDataSet(aDataSet).CreateDataSet; // 第二步:导入数据 Bridge.Append(JSONValue); aDataSet.Open; finally JSONValue.Free; Bridge.Free; end; except on E: Exception do ShowMessage(E.Message); end; end; end.
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/19465974

浙公网安备 33010602011771号