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. |
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/14840997.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2015-06-02 socket对于大数据的发送和接收