惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Y
Y Combinator Blog
G
Google Developers Blog
Vercel News
Vercel News
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Jina AI
Jina AI
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
博客园 - 三生石上(FineUI控件)
MongoDB | Blog
MongoDB | Blog
S
SegmentFault 最新的问题
阮一峰的网络日志
阮一峰的网络日志
H
Hackread – Cybersecurity News, Data Breaches, AI and More
aimingoo的专栏
aimingoo的专栏
T
Tailwind CSS Blog
博客园 - 叶小钗
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
月光博客
月光博客
Microsoft Security Blog
Microsoft Security Blog
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
云风的 BLOG
云风的 BLOG

博客园 - delphi中间件

postgresql建库建表脚本 ubuntu配置postgresql远程访问 ubuntu安装postgresql数据库 delphi 面向模型编程 array of TVarRec core.recordModel.pas 使用泛型序列结构体 DDD建模指导 rabbitMQ VS mqtt redis流的应用场景 redis消费者组 redis流的操作命令 领域服务与领域事件 业务规则和模型 限界上下文与统一语言 领域驱动 mqtt即时通讯 ActiveRecord ORM RAD(速成应用开发) unigui插件框架 工厂流水线式自动生产UNIGUI WEB软件 delphi cs\web一种统一的界面风格 - delphi中间件 - 博客园 动态生成unidbgrid 单据工厂 用json元数据填充模板 mormot2 ORM rest vs jsonrpc SSE技术详解:使用 HTTP 做服务端数据推送应用的技术 http持久连接 json-rpc 2.0
TJSONToDataSetBridge
delphi中间件 · 2026-01-10 · via 博客园 - delphi中间件

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.