在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
困惑一天的问题 一个语句搞定了。。。 回头细说。 superobject中的{$DEFINE UNICODE} 就是它,这是json官方推荐的Delphi处理json的包,地址: http://www.progdigy.com/?page_id=6 superobject中自动默认为UNICODE编码,处理中文会出现乱码。 注释{$DEFINE UNICODE} 就可以了。
var
j, a: ISuperObject; //不能是TSuperObject,尽管有TSuperObject这个类,但这里就是要这样无厘头。 begin j:=TSuperObject.Create(stObject); //创建一个json对象,如果参数是stArray,j就是一个json数组,参数还可以是其它的变量类型,比如字符串,数值之类的,看起来很强大,但是如果参数是一个描述了json的字符串的话,你会得到一个错误。如果想从文本加载,用j:=SO(json文本); j.I['数字']:=123; //就等于 {"数字": 123} ,类似的,I还可以变成S,B,C之类的,以表示字符串,布尔型,货币型。 j.S['{字符串}']:="值"; //这是个bug:带有花括号时没有任何效果。 a:=TSuperObject.Create(stArray); //创建一个json数组a a.I['']:=111; //表示给a数组添加一个111元素。注意[]中的值为'',在数组中其[]的语义进行了颠覆性的改变。 a.I[2]:="s"; //第3个元素值为"s",嗯,[]在superobject的用法还真多 j['arr']:=a; //把数组a添加进j,其key名为arr showmessage( j.toJson() ); //查看j的json文本 j:=nil; //不能写j.Free end;
先来看看什么是Json
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, Delphi,JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。 在http://www.json.org/json-zh.html中,已经提供了针对各种语言的json支持。 从它名字中就可以看出,json最早是来源于javascript,在javascript中操作json数据异常简单清晰。可以像操作类对象一样运用json数据,如 //example1: jdata =http://blog.soso.com/qz.q/{"name":"老王","age":"25"}; str1 = jdata.name;//老王 str2 = jdata["name"];//老王 //example2: jdata =http://blog.soso.com/qz.q/{"name":"老王","age":"25","address":{"address1":"福州","address2":"厦门"}}; str1 = jdata.address.address1;//福州 str2 = jdata["address"]["address1"];//福州 在Delphi2009之后的版本已经加入了对json的支持,不再需要第三方类库的支持。但我跟喜欢用Henri Gourvest的开发的SuperObject,有兴趣的可以到http://www.progdigy.com/?page_id=6了解,最新版是1.24. SuperObject提供了两个类库文件SuperObject.pas,superxmlparser.pas,其中SuperObject.pas就是用于操作json数据,而superxmlparser.pas用与从XML数据中解析出json数据。 简单例子 uses SuperObject; procedure TForm1.Button1Click(Sender: TObject); var soTest:ISuperObject; begin soTest := so('{"name":"张三","age":"25","address":{"Address1":"福州","address2":"厦门"}}'); //等价的方法 soTest := TSuperObject.ParseString('{"name":"张三","age":"25","address":{"Address1":"福州","address2":"厦门"}}'); ShowMessage(soTest['name'].AsString);//张三 ShowMessage(soTest['address.Address1'].AsString);/ /福州 end; SuperObject类库提供了类似javascript操作json的数据的方式,相当方便。 ========================================================================================== 下面是一个生成数组的例子: procedure TForm3.Button1Click(Sender: TObject); var Json,ArrJson,Arr: ISuperObject; I:integer; begin ArrJson:=SA([]); Arr:=SO(); for I:=0 to 4 do begin Json := SO; Json.S['tittle'] :='bt'+inttostr(I); Json.I['classification'] := i; Json.I['offercent'] := i; Json.s['hints'] := 'djs'+inttostr(i); Json.S['content'] := 'nr'+inttostr(i); Json.S['date'] := 'twtime'+inttostr(i); Json.S['url'] := 'wt_filename'+inttostr(i); ArrJson.AsArray.Add(Json); end; Arr.o['A']:=ArrJson; Memo1.Text:=(Arr.AsString); end; end. 解析的话 反过来就行了! ======================================================================= procedure TForm1.Button5Click(Sender: TObject); var j, a: ISuperObject; //不能是TSuperObject,尽管有TSuperObject这个类,但这里就是要这样无厘头。
begin
j:=TSuperObject.Create(stObject); //创建一个json对 j.I['数字']:=123; //就等于 {"数字": 123} ,。 j.S['字符串']:='值'; //这是个bug:带有花括号时没有任何效果。
a:=TSuperObject.Create(stArray); //创建一个json数组a
a.I['']:=111; //表示给a数组添加一个111元素。注意[]中的值为'',在数组中其[]的语义进行了颠覆性的改变。 a.I['2']:=12; //第3个元素值为"s",嗯,[]在superobject的用法还真多 j['arr']:=a; //把数组a添加进j,其key名为arr
showmessage( j.AsString() ); //查看j的json文本
j:=nil; //不能写j.Free end; |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论