2014-01-15 10 views
4

來自.NET,我一直無法做我認爲是一個簡單的任務。 我想用TJSONObjectTJSONArrayTJSONPair等構建一個簡單的JSON如下所示:生成一個示例JSON與它的數組在Delphi XE5

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

按道理我會做的就是創建一個TJSONObject,然後加入3 TJSONPair,第三對是的交易TJSONPairTJSONArrary

但是,我沒有得到我想要的。對於交易對,如果我將我的交易TJSONArrary轉換爲字符串,那麼它將作爲無效的長字符串出現。

任何幫助,將不勝感激。

+0

我sugegst你嘗試一些其他庫。 DbExpress被誤認爲是bug,並且僅限於JSON。並有大量的樣板。嘗試一下https://superobject.googlecode.com/git/readme.html的機會(例如,請參閱「幫助程序」部分,然後您可以瀏覽該輔助程序的finctions實現以獲得一個準備好的示例,並且還可以使用示例程序) –

回答

12

試試這個

{$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" 
    }] 
}