如何通过SuperObject库将记录数组存储在JSON中。例如..
type
TData = record
str: string;
int: Integer;
bool: Boolean;
flt: Double;
end;
var
DataArray: Array[0..100] of TData;
答案 0 :(得分:12)
只需使用超级对象编组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.
答案 1 :(得分:3)
首先使它成为一个字符串。
Your array:
//Array[0] := 'Apple';
//Array[1] := 'Orange';
//Array[2] := 'Banana';
myArrayAsStr := '"MyArray": [{ "1": "' + Array[0] +'", "2": "' + Array[1] +'"}';
然后您可以使用SO(myArrayAsStr)
将其转换为JSON
您总是可以在不同的过程中将数组生成为字符串,但我认为这样做是可行的。
我会继续检查是否有更简单的方法;)
编辑:
SuperObject还具有以下功能:
function SA(const Args: array of const): ISuperObject; overload;
您将能够再次将其转换为字符串,并将其添加到总JSON字符串中。