以JSON格式存储记录数组

时间:2013-03-15 10:34:32

标签: json delphi delphi-xe3 superobject

如何通过SuperObject库将记录数组存储在JSON中。例如..

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

var
DataArray: Array[0..100] of TData;

2 个答案:

答案 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字符串中。