2014-01-15 1 views
4

, исходящий из .NET, я не смог выполнить то, что считаю простой задачей. Я хочу использовать TJSONObject, TJSONArray, TJSONPair и т.д., чтобы построить простой JSON вроде следующего:Создайте образец JSON с массивом в нем в Delphi XE5

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

Логически, что я хотел бы сделать, это создать TJSONObject, а затем добавить 3 TJSONPair, третья пара является TJSONPair из сделок и a TJSONArrary

Однако я не получаю то, что хотел. Для Сделки пара, если я конвертирую свои транзакции TJSONArrary в строку, то она выдается как длинная строка, которая недействительна.

Любая помощь будет оценена по достоинству.

+0

я sugegst вы пытаетесь некоторую другую библиотеку. DbExpress был пойман на ошибках и ограничен для JSON. И иметь много шаблонов. Попробуйте свои шансы с https://superobject.googlecode.com/git/readme.html (см., Например, раздел «Помощники»), а затем вы можете просто просмотреть, что помощники выполняют финальную реализацию для готового образца. И примеры программ тоже) –

ответ

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" 
    }] 
} 
Смежные вопросы