2013-03-15 3 views

ответ

11

Просто используйте надобъект сортировочного TSuperRTTIContext

program Project1; 

{$APPTYPE CONSOLE} 
{$R *.res} 

uses 
    superobject, 
    System.SysUtils; 

type 
    TData = record 
    str : string; 
    int : Integer; 
    bool : Boolean; 
    flt : Double; 
    end; 

    TDataArray = Array [0 .. 100] of TData; 

procedure Test; 
var 
    DataArray : TDataArray; 
    so :  ISuperObject; 
    ctx :  TSuperRttiContext; 
begin 
    ctx := TSuperRttiContext.Create; 
    try 
    so := ctx.AsJson<TDataArray>(DataArray); 
    finally 
    ctx.Free; 
    end; 
    Writeln(so.AsJson); 
end; 

begin 
    try 
    Test; 
    except 
    on E : Exception do 
     Writeln(E.ClassName, ': ', E.Message); 
    end; 

    ReadLn; 

end. 
+0

Файл справки SuperObject имеет этот точный пример (может быть, не тот же код, но та же концепция с RTTI) –

+0

@JerryDodge Возможно, потому что это путь? Если этот случай документирован, почему он должен отличаться? –

+1

Я не сказал, что это должно быть по-другому, я просто говорил, что, поскольку OP мог просто прочитать файл справки SuperObject, который поставляется с библиотекой, а не спрашивать здесь. Точно такое же решение уже объяснено там. –

3

Сделайте сначала строку.

Your array: 
//Array[0] := 'Apple'; 
//Array[1] := 'Orange'; 
//Array[2] := 'Banana'; 
myArrayAsStr := '"MyArray": [{ "1": "' + Array[0] +'", "2": "' + Array[1] +'"}'; 

Тогда вы можете просто сделать его в формате JSON с SO(myArrayAsStr) Вы всегда можете создать свой массив как строку в другой процедуре, но я думаю будет способ сделать это.

Ill держать проверки, если есть более простой способ;)

EDIT: надобъекта также имеет следующие функции: function SA(const Args: array of const): ISuperObject; overload; Вы сможете преобразовать его в строку снова и добавить его в общем формате JSON строка.

+0

Интересный способ .. – user299323

+0

Просто к сведению: Результат ' "MyArray": [{ "1": "Яблоко", "2": "Orange"} '** ** не является допустимой строкой JSON. Это должно быть '{« MyArray »: [{« 1 »:« Apple »,« 2 »:« Orange »}]}' или даже '[{" 1 ":" Apple "," 2 ":" Orange " }] ' –

+0

Ah right ... oops .. my bad: P –