mormot json主从表

mormot json主从表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
//cxg 2021-6-2  mormot json主从表
 
unit service.tables;
 
interface
 
uses
  mormot, sysutils, yn.log, yn.Unidac, yn.UnidacPool, SynCrtSock, Classes,
  SynCommons, SynVirtualDataSet;
 
type
  TMasterTable = class(mORMot.TSQLRecord)  //主表
  private
    fBillId: RawUTF8;
    fOperator: RawUTF8;
  published
    property BillId: RawUTF8 read fBillId write fBillId;
    property operator: RawUTF8 read fOperator write fOperator;
  end;
 
  TDetailTable = class(mORMot.TSQLRecord) //从表
  private
    fProductId: RawUTF8;
    fProductName: RawUTF8;
  published
    property ProductId: RawUTF8 read fProductId write fProductId;
    property ProductName: RawUTF8 read fProductName write fProductName;
  end;
 
function serial(const url: sockstring): SockString;
procedure deserial(const json: string);
 
implementation
 
procedure deserial(const json: string);
var
  mtable: TMasterTable;
  dtable: TDetailTable;
  js: TDocVariantData;
  m, d, tmp: string;
begin
  js.InitJSON(json);
  m := utf8toansi(js.GetValueByPath(['mtable']));  //主表
  mtable := TMasterTable.CreateAndFillPrepare(m);
  while mtable.FillOne do
  begin
    tmp := mtable.BillId;
    tmp := mtable.operator;
  end;
  mtable.Free;
 
  d := utf8toansi(js.GetValueByPath(['dtable']));   //从表
  dtable := TDetailTable.CreateAndFillPrepare(d);
  while dtable.FillOne do
  begin
    tmp := dtable.ProductId;
    tmp := dtable.ProductName;
  end;
  dtable.Free;
end;
 
function serial(const url: sockstring): SockString;
//get url: /tables/{accountno}
var
  i: Integer;
  mTable: TMasterTable;
  dTable: TDetailTable;
  m, d: string;
  jo: Variant;
begin
  m := '[';
  for i := 1 to 2 do //生成主表数据
  begin
    TMasterTable.AutoFree(mTable);
    mTable.BillId := inttostr(i);
    mtable.operator := 'name' + inttostr(i);
    if m <> '[' then
      m := m + ',' + mtable.GetJSONValues(true, false, soselect)
    else
      m := m + mtable.GetJSONValues(true, false, soselect);
  end;
  m := m + ']';
   
  d := '[';
  for i := 1 to 2 do //生成从表数据
  begin
    TDetailTable.AutoFree(dTable);
    dTable.ProductId := inttostr(i);
    dtable.ProductName := 'p' + inttostr(i);
    if d <> '[' then
      d := d + ',' + dtable.GetJSONValues(true, false, soselect)
    else
      d := d + dtable.GetJSONValues(true, false, soselect);
  end;
  d := d + ']';
  TDocVariant.New(jo);
  jo.mTable := _JSon(m);  //生成主从表数据
  jo.dTable := _JSon(d);
  result := ansitoutf8(VariantSaveJSON(jo));
  //{"mTable":[{"BillId":"1","operator":"name1"},{"BillId":"2","operator":"name2"}],"dTable":[{"ProductId":"1","ProductName":"p1"},{"ProductId":"2","ProductName":"p2"}]}
end;
 
end.

  

  

posted @   delphi中间件  阅读(68)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2015-06-02 socket对于大数据的发送和接收
点击右上角即可分享
微信分享提示