【问题标题】:How can you create JSON manually using Delphi with the Mormot library?如何使用 Delphi 和 Mormot 库手动创建 JSON?
【发布时间】:2017-10-09 15:20:41
【问题描述】:

我想手动生成 JSON 来表示复杂对象(没有任何 RTTI 等)。

这可以使用 Mormot(以及如何)完成吗?

我找到了 JSON Variant 类型,但它似乎无法生成像这里这样的复杂 JSON: Generate JSON array with LKJSON in Delphi 7

当然我可以像使用 lkJSON 一样,但由于我的项目已经使用 Mormot,我更愿意使用已经在使用的库。

【问题讨论】:

  • 你不需要为此使用 mormot,Delphi 附带一个 JSON 库。
  • 我希望如果 Mormot 支持这一点,那么它会比 DBXJSON 更高效、更快。
  • @DavidHeffernan 我不相信 JSON 库随 PRO SKU 一起提供(除非您添加了 500 美元的 FireDAC/数据库选项)。
  • @alcalde nope,专业版有 json 库
  • 我专门创建了this,以便有一个简洁的符号来使用 Delphi 语法构建 JSON 对象。它在很大程度上基于 Variant 的...

标签: json delphi mormot


【解决方案1】:

mORMot 中有多种方法可以生成任何类型的 json 文档。

您可以在下面找到其中一个序列化您提供的示例,恕我直言,更具可读性和易于理解:

...
uses SynCommons;
...
var parcelas , venda , vendas , json : variant;
begin
  parcelas := _Obj(['numero',1,
                    'valor',50
                   ]);
  venda    := _Obj(['nsuOrigem','1',
                    'data','2014-03-14',
                    'nrParcelas',1,
                    'valor',50,
                    'parcelas' , _Arr([parcelas
                                      ])
                   ]);
  vendas := _Arr([venda]);
  venda := _Obj(['nsuOrigem','2',
                 'data','2014-03-14',
                 'nrParcelas',1,
                 'valor',50,
                 'parcelas' , _Arr([parcelas  //in this case this object is the same
                                   ])
                ]);
  TDocVariantData(vendas).AddItem(venda);
  json := _Obj(['nrVendas',2,
                'totalVendas',100.0,
                'vendas',vendas
               ]);
  //
  assert(json.nrVendas=2);
  assert(json.vendas._count=2);
  assert(json.vendas._(0).nsuOrigem='1');
  assert(json.vendas._(1).nsuOrigem='2');
  assert(json.vendas._(1).parcelas._(0).valor=50);
end;

这应该适用于 Delphi 7 到 10.4。请在the amazing documentation 中找到更多详细信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多