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

推荐订阅源

aimingoo的专栏
aimingoo的专栏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Blog — PlanetScale
Blog — PlanetScale
博客园 - Franky
The GitHub Blog
The GitHub Blog
F
Fortinet All Blogs
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tailwind CSS Blog
博客园 - 三生石上(FineUI控件)
Apple Machine Learning Research
Apple Machine Learning Research
D
Docker
Google DeepMind News
Google DeepMind News
GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Proofpoint News Feed
N
Netflix TechBlog - Medium
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Engineering at Meta
Engineering at Meta
H
Help Net Security
B
Blog
宝玉的分享
宝玉的分享

博客园 - delphi中间件

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 MCP服务器 RTTI对性能的影响 频繁地创建和销毁对象
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.