在Delphi 7中使用LKJSON生成JSON数组 [英] Generate JSON array with LKJSON in 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,但是我收到此错误:
Then I try to validade this JSON, but i received this error:
SyntaxError:第13行上的键"nsuOrigem"重复
SyntaxError: Duplicate key 'nsuOrigem' on line 13
我认为我需要在vendas
内部的字段上使用数组,但是我搜索了所有文档以及更多内容,但是找不到任何可以帮助我的东西.
I think I need to use an array on the fields inside vendas
, but I searched in all of the documentation and more, but I can't find anything that can help me.
推荐答案
您根本不会创建任何数组. vendas
和parcelas
都是对象数组,但是您通过创建它们是因为它们是单个对象.
You are not creating any arrays at all. vendas
and parcelas
are both an array of objects, but you are creating them as through they are single objects instead.
您还将以字符串而不是数字的形式创建一些JSON值.
You are also creating a few of the JSON values as strings instead of as numbers.
使用TlkJSONlist
类创建数组,例如:
Use the TlkJSONlist
class to create arrays, eg:
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);
但是,请给您的变量更多有意义的名称!并更改类构造的顺序,这将使代码更易于阅读和遵循,例如:
But please, give your variables more meaningful names! And change the order of your class constructions, it will make the code much easier to read and follow, eg:
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);
这篇关于在Delphi 7中使用LKJSON生成JSON数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!