Как вы можете создать JSON вручную, используя Delphi с библиотекой Mormot?
Я хотел бы сгенерировать JSON для представления сложного объекта, вручную (без каких-либо RTTI и т. Д.).
Можно ли это сделать с помощью Mormot (и как)?
Я обнаружил тип JSON Variant, но он, по-видимому, не способен создавать сложный JSON, подобный приведенному здесь: Генерация массива JSON с помощью LKJSON в Delphi 7
Конечно, я мог бы использовать lkJSON как, но так как мой проект уже использует 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. Пожалуйста, найдите дополнительную информацию в замечательной документации .