博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
教程-delphi的开源json库:superobject,用法简介
阅读量:6608 次
发布时间:2019-06-24

本文共 3402 字,大约阅读时间需要 11 分钟。

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

superobject中的{$DEFINE UNICODE}

 就是它,这是json官方推荐的Delphi处理json的包,地址:   

 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成为理想的数据交换语言。
  在中,已经提供了针对各种语言的json支持。
  从它名字中就可以看出,json最早是来源于javascript,在javascript中操作json数据异常简单清晰。可以像操作类对象一样运用json数据,如
  //example1:
  jdata ={"name":"老王","age":"25"};
  str1 = jdata.name;//老王
  str2 = jdata["name"];//老王
  //example2:
  jdata ={"name":"老王","age":"25","address":{"address1":"福州","address2":"厦门"}};
  str1 = jdata.address.address1;//福州
  str2 = jdata["address"]["address1"];//福州
  在Delphi2009之后的版本已经加入了对json的支持,不再需要第三方类库的支持。但我跟喜欢用Henri Gourvest的开发的SuperObject,有兴趣的可以到了解,最新版是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; 

转载于:https://www.cnblogs.com/FKdelphi/p/4654393.html

你可能感兴趣的文章
Linux-正则表达式
查看>>
基本shell脚本的编辑及变量
查看>>
加密和解密 tar
查看>>
[李景山php]每天TP5-20161216|thinkphp5-helper.php-1
查看>>
VMware、Workstation 使用
查看>>
将datatable 保存为 Excel文件(高效率版本)
查看>>
C/C++五大内存分区(转)
查看>>
springmvc_1(hello world)
查看>>
0.随笔——读后感
查看>>
CentOS 6.5下PXE+Kickstart无人值守安装操作系统
查看>>
客户端通过TCP通信分页从服务器获取数据
查看>>
xtrapivotcontrol 控件用法及相关属性
查看>>
Shell脚本 常用命令总结 二
查看>>
冰球游戏大概的模块
查看>>
ClassPathXMLApplicationContext上下文加载过程
查看>>
JS模拟select下拉菜单
查看>>
线性方程组迭代求解——Jacobi迭代算法(Python实现)
查看>>
vmware workstation14永久激活密钥分享
查看>>
iOS 多线程 之 GCD(大中枢派发)(一)
查看>>
mysql用户与权限管理笔记
查看>>