我想生产这样的东西:
{
"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:第13行重复键'nsuOrigem'
我想我需要在vendas
内的字段上使用数组,但我搜索了所有文档等等,但我找不到任何可以帮助我的内容。
答案 0 :(得分:2)
您根本不创建任何数组。 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);