我正在使用Delphi 2010和superobject库。
我已经了解了如何解析JSON文件,但是我不知道如何创建JSON?
算法如下:
- 解析JSON并加载到TStringGrid中
- 添加数据
- 将所有TStringGrid数据保存为JSON。
需要一些示例。
谢谢。
我正在使用Delphi 2010和superobject库。
我已经了解了如何解析JSON文件,但是我不知道如何创建JSON?
算法如下:
需要一些示例。
谢谢。
示例代码将以下结构添加到JSON对象中,然后保存到文件:
(*
{
"name": "Henri Gourvest", /* this is a comment */
"vip": true,
"telephones": ["000000000", "111111111111"],
"age": 33,
"size": 1.83,
"addresses": [
{
"address": "blabla",
"city": "Metz",
"pc": 57000
},
{
"address": "blabla",
"city": "Nantes",
"pc": 44000
}
]
}
*)
procedure SaveJson;
var
json, json_sub: ISuperObject;
begin
json := SO;
json.S['name'] := 'Henri Gourvest';
json.B['vip'] := TRUE;
json.O['telephones'] := SA([]);
json.A['telephones'].S[0] := '000000000';
json.A['telephones'].S[1] := '111111111111';
json.I['age'] := 33;
json.D['size'] := 1.83;
json.O['addresses'] := SA([]);
json_sub := SO;
json_sub.S['address'] := 'blabla';
json_sub.S['city'] := 'Metz';
json_sub.I['pc'] := 57000;
json.A['addresses'].Add(json_sub);
json_sub.S['address'] := 'blabla';
json_sub.S['city'] := 'Nantes';
json_sub.I['pc'] := 44000;
json.A['addresses'].Add(json_sub);
json.SaveTo('C:\json_out.txt');
json := nil;
json_sub := nil;
end;
json.A['telephones'].S[0] := '000000000';
改为 json['telephones[0]'] := '000000000';
,将 json.A['addresses'].Add(json_sub);
改为 json['addresses[]'] := json_sub;
。 - Arioch 'The阅读帮助文件:https://github.com/hgourvest/superobject/blob/master/README.md
然后阅读TSuperArray的源代码(“使用源代码,卢克”)
得到以下代码段:
var
obj: ISuperObject;
a: TSuperArray; // shortcut
begin
obj := TSuperObject.Create(stArray);
// or obj := SA([]);
a := obj.AsArray;
a.s[0] := 'aaaa';
a.s[1] := 'bbbb';
a.s[3] := 'cccc';
...
obj.SaveTo('File.txt');
a := nil; obj := nil;
...
end;
帮助文件中还有这样一句引用:obj['foo[]'] := value; // 添加一个数组项
这提供了另一种方法来填充数组(如果根对象本身不是数组)。引用http://code.google.com/p/superobject/source/browse/tests/test_usage.dpr
my_array := TSuperObject.Create(stArray);
my_array.I[''] := 1; // append
my_array.I[''] := 2; // append
my_array.I[''] := 3; // append
my_array.I['4'] := 5;
接下来,这个对象数组将作为属性插入到另一个对象中。
my_object := TSuperObject.Create(stObject);
my_object.I['abc'] := 12;
// my_object.S['path.to.foo[5]'] := 'bar';
my_object.B['bool0'] := false;
my_object.B['bool1'] := true;
my_object.S['baz'] := 'bang';
my_object.S['baz'] := 'fark';
my_object.AsObject.Delete('baz');
my_object['arr'] := my_array;
TObjectList示例
type
TPeople = class
ID: Integer;
Name: string;
Address: string;
function JSON: ISuperObject;
end;
TMyClass = class
TList: TObjectList<TPeople>;
procedure SaveToJSON(var JSON: ISuperObject);
end;
function TPeople.JSON: ISuperObject;
begin
Result := SO; //defining a JSON Object
Result.I['id'] := ID;
Result.S['name'] := Name;
Result.S['address'] := Address;
end;
procedure TMyClass.SaveToJSON(var JSON: ISuperObject);
var
Obj: TDLSBatchField;
begin
JSON := SO;
JSON.I['count'] := FItems.Count;
JSON['items'] := SA([]); //defining an array
for Obj in FItems do
JSON.A['items'].Add(Obj.JSON);
end;
var jsText : String; jsObj : TlkJSONobject; begin
jsObj:=TlkJSON.ParseText(jsText) as TlkJSONobject;
jsText := TlkJSON.GenerateText(jsObj);
obj := ctx.AsJson<TData>(data);
的实际实现。 - Arioch 'The