在Delphi 7中使用LKJSON生成JSON数组 [英] Generate JSON array with LKJSON in Delphi 7

查看:459
本文介绍了在Delphi 7中使用LKJSON生成JSON数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想产生这样的东西:

{
  "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.

推荐答案

您根本不会创建任何数组. vendasparcelas都是对象数组,但是您通过创建它们是因为它们是单个对象.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆