如何通过SuperObject库以JSON格式存储记录数组。例如..以JSON格式存储记录数组
type
TData = record
str: string;
int: Integer;
bool: Boolean;
flt: Double;
end;
var
DataArray: Array[0..100] of TData;
如何通过SuperObject库以JSON格式存储记录数组。例如..以JSON格式存储记录数组
type
TData = record
str: string;
int: Integer;
bool: Boolean;
flt: Double;
end;
var
DataArray: Array[0..100] of TData;
只需使用超对象编组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.
首先将其设为字符串。
Your array:
//Array[0] := 'Apple';
//Array[1] := 'Orange';
//Array[2] := 'Banana';
myArrayAsStr := '"MyArray": [{ "1": "' + Array[0] +'", "2": "' + Array[1] +'"}';
然后,你可以让它变成JSON与SO(myArrayAsStr)
您可以随时生成您的阵列在不同的程序字符串,但我认为是这样做的方式。
虐待继续检查,如果有一个更简单的方法;)
编辑: 超对象还具有以下功能: function SA(const Args: array of const): ISuperObject; overload;
您可以到再次转换为字符串,并在总JSON添加它串。
有趣的方式.. – user299323 2013-03-15 10:48:28
只是要注意:结果' “MYARRAY”:[{ “1”: “苹果”, “2”: “橙色”} '是**不是**有效的JSON字符串。它应该是'{“MyArray”:[{“1”:“Apple”,“2”:“Orange”}]}或甚至是[{“1”:“Apple”,“2” }]' – 2013-03-19 12:22:25
啊右...哎呀..我的坏:P – 2013-03-19 13:01:08
SuperObject的帮助文件有这个确切的例子(也许不是相同的代码,但与RTTI相同的概念) – 2013-03-15 15:34:57
@JerryDodge也许因为这是要走的路?如果这种情况被记录,为什么它会不同? – 2013-03-15 15:56:23
我没有说它应该是不同的,我只是说,因为OP可以简单地阅读库中附带的SuperObject的帮助文件,而不是在这里问。那里已经解释了完全相同的解决方案。 – 2013-03-15 16:08:21