在Delphi XE5中生成一个包含数组的样本JSON

5

作为一个来自.NET的开发者,我一直无法完成我认为很简单的任务。 我想要使用TJSONObjectTJSONArrayTJSONPair等类来构建一个简单的JSON,如下所示:

{
 "APIKEY": "sadfsafsafdsa",
 "UserID": "123123123",
 "Transactions:"
        [{
           "TransactionID": 1,
           "Amount": 23
         },
         {
         "TransactionID": 2,
         "Amount": 53
         }]       
}

逻辑上,我会创建一个TJSONObject并添加3个TJSONPair,第三个pair是一个TJSONArrary类型的TransactionsTJSONPair

然而,结果并不是我想要的。对于Transactions pair,如果我将我的交易TJSONArrary转换为字符串,那么它会变成一个无效的长字符串。

任何帮助都将不胜感激。


我建议你尝试另一个库。DbExpress在处理JSON时存在缺陷和限制,并且有很多样板代码。你可以尝试使用https://superobject.googlecode.com/git/readme.html(请参见“helpers”部分的示例)。然后,你可以浏览那些辅助函数的实现以获取准备好的示例和示例程序。 - Arioch 'The
1个回答

13

试试这个

{$APPTYPE CONSOLE}

{$R *.res}

uses
  Data.DBXJSON,
  System.SysUtils;


var
  LJson, LJsonObject: TJSONObject;
  LArr: TJSONArray;
begin
  try
      ReportMemoryLeaksOnShutdown:=True;
      LJsonObject := TJSONObject.Create;
      try
        LJsonObject.AddPair(TJSONPair.Create('APIKEY', 'sadfsafsafdsa'));
        LJsonObject.AddPair(TJSONPair.Create('UserID', '123123123'));

          LArr := TJSONArray.Create;
          LJson   := TJSONObject.Create;
          LJson.AddPair(TJSONPair.Create('TransactionID', '1'));
          LJson.AddPair(TJSONPair.Create('Amount', '23'));
          LArr.Add(LJson);

          LJson   := TJSONObject.Create;
          LJson.AddPair(TJSONPair.Create('TransactionID', '2'));
          LJson.AddPair(TJSONPair.Create('Amount', '53'));
          LArr.Add(LJson);

          LJsonObject.AddPair(TJSONPair.Create('Transactions', LArr));

        Write(LJsonObject.ToString);

      finally
        LJsonObject.Free;  //free all the child objects.
      end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.

这将创建一个类似于JSON的对象

{   "APIKEY": "sadfsafsafdsa",   
    "UserID": "123123123",   
    "Transactions": 
    [{
      "TransactionID": "1",
      "Amount": "23"
    },
    {
      "TransactionID": "2",
      "Amount": "53"
    }] 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接