[摘要:迷惑一天的题目 一个语句弄定了。。。 转头细道。 superobject中的{$DEFINE UNICODE} 便是它,那是json民圆推举的Delphi处置惩罚json的包,地点:http://www.progdigy.com/?page_id=6 superobject中主动默许为U] 

困惑一天的问题 一个语句搞定了。。。 回头细说。\

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的数据的方式,相当方便。 
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 3 个月前
8c391e04 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐