我想手动生成 JSON 来表示复杂对象(没有任何 RTTI 等)。
这可以使用 Mormot(以及如何)完成吗?
我找到了 JSON Variant 类型,但它似乎不能像这里那样生成复杂的 JSON: Generate JSON array with LKJSON in Delphi 7
当然我可以像使用 lkJSON 一样,但由于我的项目已经使用了 Mormot,我更愿意使用已经在使用的库。
我想手动生成 JSON 来表示复杂对象(没有任何 RTTI 等)。
这可以使用 Mormot(以及如何)完成吗?
我找到了 JSON Variant 类型,但它似乎不能像这里那样生成复杂的 JSON: Generate JSON array with LKJSON in Delphi 7
当然我可以像使用 lkJSON 一样,但由于我的项目已经使用了 Mormot,我更愿意使用已经在使用的库。
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。请在令人惊叹的文档中找到更多详细信息。