Delphi XE7有一个对JSON处理的单元,在你需要使用JSON的单元里面引入"System.json",随后你就可以用Delphi自己的json处理类了。我写的小例子只是对包含字符串和数组的JSON进行解析,这两种数据类型,我觉得是实际使用中最常用、有用的类型,所以我仅仅用这两种例子做演示!

演示代码:

{
功能:DelphiXE7中使用JSON
------------------------------------------------------------------------------
说明:
1,使用Delphi自己带的JSON(system.json)。
2,这仅仅是一个简单例子,以后还会增加演示功能。
------------------------------------------------------------------------------
注意:
1,JSON类创建后,里面所有元素不用管释放,JSON类自己管理,千万不要画蛇添足啊!!!!!!
------------------------------------------------------------------------------
修改时间:2014/11/23 00:13
------------------------------------------------------------------------------
开发工具:Delphi XE7
测试手机:华为荣耀X1
}
unit Unit1; interface uses
System.SysUtils, System.Types, System.UITypes, System.Classes,
System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
FMX.Layouts, FMX.Memo; type
TForm1 = class(TForm)
Panel1: TPanel;
Memo1: TMemo;
Panel2: TPanel;
Button1: TButton;
Button2: TButton;
Memo2: TMemo;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormResize(Sender: TObject);
private
{ Private declarations } // 重新设置button按钮
procedure ResetButton;
public
{ Public declarations }
end; var
Form1: TForm1; const
// 演示用的JSON
jsonString = '{"name":"张三", "other":["中国","程序员"]}'; implementation {$R *.fmx} uses
System.json; // Dephi自带的JSON单元 procedure TForm1.Button1Click(Sender: TObject);
var
JSONObject: TJSONObject; // JSON类
i: Integer; // 循环变量
temp: string; // 临时使用变量
jsonArray: TJSONArray; // JSON数组变量
begin if Trim(Memo1.Text) = '' then
begin
ShowMessage('要解析数据不能为空!');
end
else
begin
JSONObject := nil;
try
{ 从字符串生成JSON }
JSONObject := TJSONObject.ParseJSONValue(Trim(Memo1.Text)) as TJSONObject; if JSONObject.Count > then
begin { 1,遍历JSON数据 }
Memo2.Lines.Add('遍历JSON数据:' + ##); Memo2.Lines.Add('JSON数据数量:' + IntToStr(JSONObject.Count)); for i := to JSONObject.Count - do
begin if i = then
begin
temp := JSONObject.Get(i).ToString + ##;;
end
else
begin
temp := temp + JSONObject.Get(i).ToString + ##;
end; end; { output the JSON to console as String }
Memo2.Lines.Add(temp); Memo2.Lines.Add('------------------------------'); { 2,按元素解析JSON数据 }
Memo2.Lines.Add('按元素解析JSON数据:' + ##);
temp := 'name = ' + JSONObject.Values['name'].ToString + ##;
Memo2.Lines.Add(temp); // json数组
jsonArray := TJSONArray(JSONObject.GetValue('other'));;
if jsonArray.Count > then
begin // 得到JSON数组字符串
temp := 'other = ' + JSONObject.GetValue('other').ToString + ##; // 循环取得JSON数组中每个元素
for i := to jsonArray.Size - do
begin
temp := temp + IntToStr(i + ) + ' : ' + jsonArray.Items[i]
.Value + ##;
end; end; Memo2.Lines.Add(temp); end
else
begin
temp := '没有数据!';
Memo2.Lines.Add(temp);
end; finally
JSONObject.Free;
end;
end; end; // 清空显示数据
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Text := '';
Memo2.Text := '';
end; // 设置要解析的JSON数据
procedure TForm1.Button3Click(Sender: TObject);
begin
Memo1.Text := jsonString;
end; // 设置要解析的JSON数据
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Text := jsonString;
end; procedure TForm1.FormResize(Sender: TObject);
begin
// 重新设置button按钮
self.ResetButton;
end; // 重新设置button按钮
procedure TForm1.ResetButton;
var
buttonWidth: Integer;
begin
buttonWidth := self.Width div ; Button1.Width := buttonWidth;
Button2.Width := buttonWidth;
Button3.Width := buttonWidth;
end; end.

源代码下载:http://dl5.csdn.net/fd.php?i=942981887415230&s=8613165e1e05b7e0f273b3a4729e2d0b

Delphi XE7中使用JSON的更多相关文章

  1. 关于delphi XE7中的动态数组和并行编程(第一部分)

    本文引自:http://www.danieleteti.it/category/embarcadero/delphi-xe7-embarcadero/ 并行编程库是delphi XE7中引进的最受期待 ...

  2. Delphi XE7中新并行库

    Delphi XE7中添加了新的并行库,和.NET的Task和Parellel相似度99%. 详细内容能够看以下的文章: http://www.delphifeeds.com/go/s/119574 ...

  3. delphi XE7 中的消息

    在delphi XE7的程序开发中,消息机制保证进程间的通信. 在程序中,消息来自: 1)系统: 通知你的程序用户输入,涂画以及其他的系统范围的事件: 2)你的程序:不同的程序部分之间的通信信息.   ...

  4. Delphi XE7中开发安卓程序一些有用的帮助资源

    说明:要想看到下面资源,打开帮助后,在搜索里面输入URL最后一部分,如果最后带“.html”,则把它删除,随后搜索一下,就看到了. 例如:想看下面的FireMonkey类关系图,只在搜索里面输入&qu ...

  5. Delphi XE7中各种字符串与字符类型的内存结构

    1. ShortString 类型 定义:type ShortString = string[255]; 内存结构与大小:ShortString 是每个字符为单字节的字符串.ShortString 的 ...

  6. delphi XE7 数组操作中缺少的find(POS)功能

    delphi xe7 中对数组操作做了很多扩充,比如加入了类似字符串处理的功能. 例如,数组相加 var A: array of integer; B: TBytes = [1,2,3,4]; //I ...

  7. Delphi XE7实现的任意位置弹出菜单

    Delphi XE7中目前还没有弹出菜单组件,这个弹出菜单应用很普遍,在JAVA开发的安卓程序中很简单就可以用上了,应该说是一个标准控件.看了一些例子,但是都不能满足我想在任意位置弹出菜单需求,于是自 ...

  8. Delphi xe7组件和控件的安装方法

    暂时我所遇到的所有控件安装方法大体与下面两种相同. 若有不同大家提出来,一起想办法解决. .dproj格式的组件安装方法: raise组件 安装详细步骤如下: 一.设置搜索路径1. 将本包中的文件连同 ...

  9. RemObjects SDK Source For Delphi XE7

    原文:http://blog.csdn.net/tht2009/article/details/39545545 1.目前官网最新版本是RemObjects SDK for Delphi and al ...

随机推荐

  1. 常见反编译产生错误 k__BackingField 解决办法

    常见反编译产生错误 k__BackingField 解决办法     无聊反编译小蚂蚁出现上千的错同样的错       private bool <EnableRuntimeHandler> ...

  2. js 判断空数组,空对象!

    var attr1 = [ ]; var obj1 = { }; console.log(isEmpty(attr1)); console.log(isEmpty(obj1)); function i ...

  3. less gradient-vertical 方法的实现

    // Vertical gradient using CSS where possible, and base64-encoded SVG for IE9 (enables use of this i ...

  4. 如何在ArcMap中监听键盘鼠标事件(转)

    如何在ArcMap中监听键盘鼠标事件(转) Link: http://www.cnblogs.com/dyllove98/p/3155551.html 昨天有个朋友想要实现一个功能,就是在ArcMap ...

  5. Redis 与 Lua Script

    [Redis Script] 1.EVAL script numkeys key [key ...] arg [arg ...] 从 Redis 2.6.0 版本开始,通过内置的 Lua 解释器,可以 ...

  6. lammps模拟化学反应(1)

    1. Can I use lammps to chemical reaction systems?Please note that you can only get as good an answer ...

  7. ibatis 常用标签

    prepend:自动在前面加上:自动新手:自动预:自动前置 property:属性 compareValue:指定的常数,值 //判断不相等: <isNotEqual prepend=" ...

  8. cocos2dx中使用tolua++使lua调用c++函数

    一直想学学cocos2dx中如何使用tolua++工具使得lua脚本调用C++函数,今天就来搞一下,顺便记录下来: 首先,我们打开cocos2dx-2.2.4中projects下的test的VS工程, ...

  9. 如何查看服务器(linux系统)当前的负载信息(转)

    如何查看服务器当前的负载信息http://www.flybaaa.com/help 网吧内突然很卡,这个情况我相信大家都有遇见过,但是通过什么方法来排查是否linux服务器的负载过大导致的这个问题呢? ...

  10. docker+zookeeper+mesos+marathon集群

    实验环境: 主机名 ip地址 运行服务 安装组件 docker-master1 192.168.20.210 zookeepermesos-mastermarathon mesosmarathonme ...