教程-delphi的开源json库:superobject,用法简介
困惑一天的问题 一个语句搞定了。。。 回头细说。
superobject中的{$DEFINE UNICODE}
就是它,这是json官方推荐的Delphi处理json的包,地址: http://www.progdigy.com/?page_id=6
superobject中自动默认为UNICODE编码,处理中文会出现乱码。
注释{$DEFINE UNICODE} 就可以了。
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(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这个类,但这里就是要这样无厘头。
j:=TSuperObject.Create(stObject); //创建一个json对
j.I['数字']:=123; //就等于 {"数字": 123} ,。
j.S['字符串']:='值'; //这是个bug:带有花括号时没有任何效果。
a.I['']:=111; //表示给a数组添加一个111元素。注意[]中的值为'',在数组中其[]的语义进行了颠覆性的改变。
a.I['2']:=12; //第3个元素值为"s",嗯,[]在superobject的用法还真多
j['arr']:=a; //把数组a添加进j,其key名为arr
j:=nil; //不能写j.Free
end;
教程-delphi的开源json库:superobject,用法简介的更多相关文章
- [C#技术] .NET平台开源JSON库LitJSON的使用方法
一个简单示例: String str = "{’name’:’cyf’,’id’:10,’items’:[{’itemid’:1001,’itemname’:’hello’},{’itemi ...
- [教程]微信官方开源UI库-WeUI使用方法【申明:来源于网络】
[教程]微信官方开源UI库-WeUI使用方法 [ 教程]微信官方开源UI库-WeUI使用方法 地址:http://www.weui.org.cn/?/article/1 微信公众号开发-WeUI使用说 ...
- 开源 JSON 库解析性能对比( Jackson / Json.simple / Gson )
Json 已成为当前服务器与 web 应用之间数据传输的公认标准. 微服务及分布式架构经常会使用 Json 来传输此类文件,因为这已经是 webAPI 的事实标准. 不过正如许多我们习以为常的事情一样 ...
- .NET平台开源JSON库LitJSON的使用方法
下载地址:LitJson.dll下载 一个简单示例: String str = "{'name':'cyf','id':10,'items':[{'itemid':1001,'itemnam ...
- 教程-Delphi中Spcomm使用属性及用法详解
Delphi中Spcomm使用属性及用法详解 Delphi是一种具有 功能强大.简便易用和代码执行速度快等优点的可视化快速应用开发工具,它在构架企业信息系统方面发挥着越来越重要的作用,许多程序员愿意选 ...
- Python爬虫:数据分析小能手:JSON库的用法
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写. 给大家推荐一个Python交流的q裙,大家在学习遇到了什么问题都可以进群一起交流,大家 ...
- C++ Json工具--Jsoncpp用法简介
文章目录 Json简介 用法简介 数据类型 C++代码示例 代码执行输出结果 JSON在线解析及格式化验证 - JSON.cn Json简介 JSON(JavaScript Object Notati ...
- 开源高性能网络库Libevent的简介
Libevent是什么? Libevent 是一个用C语言编写的.轻量级的开源高性能网络库. 官网:http://libevent.org/ 优点: (1)事件驱动,高性能 (2)轻量级,专注于网络 ...
- Android开源界面库--ResideMenu用法
网上关于ResideMenu用法的教程很多,但基本上全是从Github上copy下来的,Gitbub上给出的了对应的demo,但是由于我的IDE原因吧,demo一直导入不成功.为此自己又捣鼓了一翻,终 ...
随机推荐
- 一步步学习ASP.NET MVC3 (8)——EmptyResult,ContentResult,RedirectResult
请注明转载地址:http://www.cnblogs.com/arhat 上一章,我们阐述了Controller,Action和ActionResult所代表的含义及使用,本章继续研究ActionRe ...
- Python按照索引访问list
由于list是一个有序集合,所以,我们可以用一个list按分数从高到低表示出班里的3个同学: >>> L = ['Adam', 'Lisa', 'Bart'] 那我们如何从list中 ...
- Codeforces Round #326 div2
Problem_A(588A): 题意: Duff 很喜欢吃肉, 每天都要吃,然而她又懒得下楼. 可以买很多放在家里慢慢吃.然而肉价每天都在变化,现给定一个n, 表示有多少天,然后第i天吃ai kg的 ...
- LFI & RFI & PHP封装协议之安全问题研究
目录 . 文件包含的基本概念 . LFI(Local File Include) . RFI(Remote File Include) . PHP中的封装协议(伪协议).PHP的流式文件操作模式所带来 ...
- RubyCritic:一款不错的检测代码质量工具
关注代码质量是高效开发必须要做的一件事,那么在 Ruby 开发的过程中,是否有什么好的代码质量检测工具呢?下面由 Ruby 工程师路英瑞介绍一下 RubyCritic--一款还不错的代码质量检测工具. ...
- python参考手册--第10、11章执行环境、调试
1.解释器选项和环境 python [options] [-c cmd | filename | - ] [args] 例如:python -m pdb test.py 以脚本的形式运行库模块pdb ...
- CF 217 B. Berland Bingo
http://codeforces.com/contest/370/problem/B 题意 :呃,这个题我说不清楚....就是有n个人,第 i 个人手里有 mi 张牌,如果,现在主人念数,念到哪张牌 ...
- [dp]Codeforces30C Shooting Gallery
题目链接 题意: 给n个点 每个点的坐标 x y 出现的时间t 射中的概率 从i点到j点的时间为它们的距离. 求射中个数的最大期望 很水的dp 坑点就是要用LL #include <cstdi ...
- RxJava开发精要3-向响应式世界问好
原文出自<RxJava Essentials> 原文作者 : Ivan Morgillo 译文出自 : 开发技术前线 www.devtf.cn 转载声明: 本译文已授权开发者头条享有独家转 ...
- ruby使用IO类读写文件
path="test.txt" port=open(path) begin port.each_line{|line| p line.to_s } ensure port.clos ...