Создайте массив JSON с помощью LKJSON в Delphi 7
Я хочу произвести что-то вроде этого:
{
"nrVendas": 2,
"totalVendas": 100.0,
"vendas": [
{
"nsuOrigem": "1",
"data": "2014-03-14",
"nrParcelas": 1,
"valor": 50,
"parcelas": [
{
"numero": 1,
"valor": 50
}
]
},
{
"nsuOrigem": "2",
"data": "2014-03-14",
"nrParcelas": 1,
"valor": 50,
"parcelas": [
{
"numero": 1,
"valor": 50
}
]
}
]
}
Я пытаюсь это так:
js3 := TlkJSONobject.Create;
js3.Add('numero', '1');
js3.Add('valor', '50');
js32 := TlkJSONobject.Create;
js32.Add('numero', '1');
js32.Add('valor', '100');
js2 := TlkJSONobject.Create;
js2.Add('nsuOrigem', '1');
js2.Add('data', '2014-02-02');
js2.Add('nrParcelas', 1);
js2.Add('valor', 50);
js2.Add('parcelas', js3);
js2.Add('nsuOrigem', '2');
js2.Add('data', '2014-02-02');
js2.Add('nrParcelas', 1);
js2.Add('valor', 50);
js2.Add('parcelas', js32);
js0 := TlkJSONobject.Create;
js0.Add('numeroVendas', 2);
js0.Add('totalVendas', 100.0);
js0.Add('vendas', js2);
i := 0;
s := GenerateReadableText(js0, i);
Memo2.Lines.Add(s);
Но я получаю это вместо этого:
{
"numeroVendas": 2,
"totalVendas": 100,
"vendas": {
"nsuOrigem": "1",
"data": "2014-02-02",
"nrParcelas": 1,
"valor": 50,
"parcelas": {
"numero": "1",
"valor": "50"
},
"nsuOrigem": "2",
"data": "2014-02-02",
"nrParcelas": 1,
"valor": 50,
"parcelas": {
"numero": "1",
"valor": "100"
}
}
}
Затем я пытаюсь проверить этот JSON, но я получил эту ошибку:
SyntaxError: дубликат ключа 'nsuOrigem' в строке 13
Я думаю, что мне нужно использовать массив на полях внутри vendas
, но я искал во всей документации и многое другое, но я не могу найти ничего, что может мне помочь.
1 ответ
Вы вообще не создаете никаких массивов. vendas
а также parcelas
оба являются массивом объектов, но вы создаете их так, как будто они представляют собой отдельные объекты.
Вы также создаете несколько значений JSON в виде строк, а не чисел.
Использовать TlkJSONlist
класс для создания массивов, например:
js4_1 := TlkJSONobject.Create;
js4_1.Add('numero', 1);
js4_1.Add('valor', 50);
js4_2 := TlkJSONobject.Create;
js4_2.Add('numero', 1);
js4_2.Add('valor', 100);
js3_1 := TlkSONlist.Create;
js3_1.Add(js4_1);
js3_2 := TlkSONlist.Create;
js3_2.Add(js4_2);
js2_1 := TlkJSONobject.Create;
js2_1.Add('nsuOrigem', '1');
js2_1.Add('data', '2014-02-02');
js2_1.Add('nrParcelas', 1);
js2_1.Add('valor', 50);
js2_1.Add('parcelas', js3_1);
js2_2.Add('nsuOrigem', '2');
js2_2.Add('data', '2014-02-02');
js2_2.Add('nrParcelas', 1);
js2_2.Add('valor', 50);
js2_2.Add('parcelas', js3_2);
js1 := TlkJSONlist.Create;
js1.Add(js2_1);
js1.Add(js2_2);
js0 := TlkJSONobject.Create;
js0.Add('numeroVendas', 2);
js0.Add('totalVendas', 100.0);
js0.Add('vendas', js1);
i := 0;
s := GenerateReadableText(js0, i);
Memo2.Lines.Add(s);
Но, пожалуйста, дайте вашим переменным более значимые имена! И измените порядок ваших конструкций классов, это сделает код намного проще для чтения и отслеживания, например:
root := TlkJSONobject.Create;
root.Add('numeroVendas', 2);
root.Add('totalVendas', 100.0);
vendas := TlkJSONList.Create;
root.Add('vendas', vendas);
venda := TlkJSONobject.Create;
vendas.Add(venda);
venda.Add('nsuOrigem', '1');
venda.Add('data', '2014-02-02');
venda.Add('nrParcelas', 1);
venda.Add('valor', 50);
parcelas := TlkJSONlist.Create;
venda.Add('parcelas', parcelas);
parcela := TlkJSONobject.Create;
parcelas.Add(parcela);
parcela.Add('numero', 1);
parcela.Add('valor', 50);
venda := TlkJSONobject.Create;
vendas.Add(venda);
venda.Add('nsuOrigem', '1');
venda.Add('data', '2014-02-02');
venda.Add('nrParcelas', 1);
venda.Add('valor', 50);
parcelas := TlkJSONlist.Create;
venda.Add('parcelas', parcelas);
parcela := TlkJSONobject.Create;
parcelas.Add(parcela);
parcela.Add('numero', 1);
parcela.Add('valor', 100);
i := 0;
s := GenerateReadableText(root, i);
Memo2.Lines.Add(s);