教程-delphi的开源json库:superobject,用法简介

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

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;

时间: 2024-10-31 07:52:33

教程-delphi的开源json库:superobject,用法简介的相关文章

.NET平台开源JSON库LitJSON的使用方法

LitJson.dll下载 一个简单示例: String str = "{'name':'cyf','id':10,'items':[{'itemid':1001,'itemname':'hello'},{'itemid':1002,'itemname':'hello2'}]}"; //*** 读取JSON字符串中的数据 ******************************* JsonData jd = JsonMapper.ToObject(str); String name

教程-Delphi中Spcomm使用属性及用法详解

Delphi中Spcomm使用属性及用法详解 Delphi是一种具有 功能强大.简便易用和代码执行速度快等优点的可视化快速应用开发工具,它在构架企业信息系统方面发挥着越来越重要的作用,许多程序员愿意选择 Delphi作为开发工具编制各种应用程序.但是,美中不足之处是 Delphi没有自带的串口通信控件,在它的帮助文档里也没有提及串口通信,这就给编制通信程序的开发人员带来许多不便. 目前,利用 Delphi实现串口通信的常用的方法有 3种:一是利用控件,如 MSCOMM控件和 SPCOMM控件:二

开源高性能网络库Libevent的简介

Libevent是什么? Libevent 是一个用C语言编写的.轻量级的开源高性能网络库. 官网:http://libevent.org/ 优点: (1)事件驱动,高性能 (2)轻量级,专注于网络 (3)跨平台,支持Windows,Linux,MacOS等 (4)支持多路I/O复用,epoll,poll,dev/poll,select 和kqueue 等 (5)支持I/O,信号等事件 五大功能: (1)DNS是libevent提供的一个异步DNS查询功能 (2)HTTP是libevent的一个

Android 开源日志库 Logger 使用教程

转载请注明出处: http://blog.csdn.net/like_program/article/details/52986553 1.Logger 是什么 在我们日常的开发中,肯定是少不了要和 Log 打交道,回想一下我们是怎么使用 Log 的:先定义一个静态常量 TAG,TAG 的值通常是当前类的类名,然后在需要打印 Log 的地方,调用 Log.d(TAG, "要打印的内容").每次新写一个类,都要写一个 TAG,这也就算了,最苦逼的是,项目一上线,还要手动去把每个 Log

YxdJSON - Delphi 高性能 JSON 库(支持RTTI和序列化操作)

Delphi 高性能 JSON 库(支持RTTI和序列化操作) 支持平台: Windows, Android, iOS, Mac OS https://github.com/yangyxd/YxdJson

fastjson是阿里巴巴的开源JSON解析库

fastjson的API十分简洁. String text = JSON.toJSONString(obj); //序列化 VO vo = JSON.parseObject("{...}", VO.class); //反序列化 https://github.com/alibaba/fastjson/wiki/Quick-Start-CN fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串

C++100款开源界面库[转]

(声明:Alberl以后说到开源库,一般都是指著名的.或者不著名但维护至少3年以上的.那些把代码一扔就没下文的,Alberl不称之为开源库,只称为开源代码.这里并不是贬低,像Alberl前面那个系列的教程<2013 duilib入门简明教程>,还有本系列教程,还有前面介绍的CodeProject,基本上都是代码往上面一扔,就不用再怎么维护的.这些都称之为开源代码,其实开源代码对新手的帮助更大,因为很简明的说明了代码用法~O(∩_∩)O~) 前面两个教程已经对制作界面的几种方式进行了比较,权威界

爆料喽!!!开源日志库Logger的使用秘籍

导读 日志对于开发来说是非常重要的,不管是调试数据查看.bug问题追踪定位.数据信息收集统计,日常工作运行维护等等,都大量的使用到.今天介绍著名开源日志库Logger的使用,库的地址:https://github.com/orhanobut/logger 在Android Studio中的gradle中加入,就可以引用依赖logger库: dependencies { compile 'com.orhanobut:logger:1.15' } Logger库能提供的功能: 线程的信息 类的信息

开源的库RestSharp轻松消费Restful Service

现在互联网上的服务接口都是Restful的,SOAP的Service已经不是主流..NET/Mono下如何消费Restful Service呢,再也没有了方便的Visual Studio的方便生产代理的工具了,你还在用HttpWebRequest 自己封装吗?Restful Service还有授权问题,自己写出来的代码是不是很不优雅?通常Restful Service返回的数据格式是XML或者Json,还要设置服务的输入参数等等,使用起来很复杂.本文向你推荐一个开源的库RestSharp轻松消费