json主从表

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
//cxg 2021-6-1 主从表json
 
unit service.tables;
 
interface
 
uses
  system.JSON.Serializers, system.JSON,
  system.Generics.Collections, sysutils, Classes;
 
type
  TMasterTable = record
    billid: Integer;
    operate: string;
  end;
 
  TDetailTable = record
    productid: Integer;
    productname: string;
  end;
 
var MasterTables: TArray<TMasterTable>;
var DetailTables: TArray<TDetailTable>;
 
function getJson(const url: string): string;
procedure setJson(const v: string);
 
implementation
 
procedure setJson(const v: string);
begin
  var jo: TJSONObject := TJSONObject.ParseJSONValue(v) as TJSONObject;
  var ja: TJSONArray := TJSONArray(jo.GetValue('主表'));
  var s: string := ja.ToString;  //[{"billid":0,"operate":"name0"},{"billid":1,"operate":"name1"}]
  var serial: TJsonSerializer := TJsonSerializer.Create;
  MasterTables := serial.Deserialize<TArray<TMasterTable>>(s);
  s := MasterTables[0].operate;  //name0
  serial.Free;
  jo.Free;
end;
 
function getJson(const url: string): string;
//主从表 get url: /dal/bills/{accountno}
begin
  try
    try
      SetLength(MasterTables, 2);      //生成主表数据
      var i: Integer;
      for i := 0 to 1 do
      begin
        MasterTables[i].billid := i;
        MasterTables[i].operate := 'name' + i.ToString;
      end;
      SetLength(DetailTables, 2);
      for i := 0 to 1 do           //生成从表数据
      begin
        DetailTables[i].productid := i;
        DetailTables[i].productname := 'name' + i.ToString;
      end;
      var serial: TJsonSerializer := TJsonSerializer.Create;
      var jo: TJSONObject := TJSONObject.Create;
      var ja: TJSONArray := TJSONObject.ParseJSONValue(serial.Serialize<TArray<TMasterTable>>(MasterTables)) as TJSONArray;
      jo.AddPair('主表', ja);
      ja := TJSONObject.ParseJSONValue(serial.Serialize<TArray<TDetailTable>>(DetailTables)) as TJSONArray;
      jo.AddPair('从表', ja);
      Result := jo.ToString; //{"主表":[{"billid":0,"operate":"name0"},{"billid":1,"operate":"name1"}],"从表":[{"productid":0,"productname":"name0"},{"productid":1,"productname":"name1"}]}
      jo.free;
      serial.free;
    except
      on E: Exception do
      begin
        result := '{"异常":"' + e.Message + '"}';
      end;
    end;
  finally
 
  end;
end;
 
end.

  

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