3.3 使用JSON通信
实际上,第1章中介绍如何结合Android和PHP学习时,我们就曾经提到过JSON协议,本节我们就来学习一下这个协议的基本内容。JSON是JavaScript对象表示法(JavaScript Object Notation)的简称,JSON协议源自JavaScript脚本语言的对象持久化表示方法,由于这种表示法比较简单易懂,而且传输的数据也比较小巧(相对于XML来说应该算是非常小巧了),因此,近年来被广泛地用于互联网应用的数据封装。
首先,我们来学习一下JSON协议的数据表示方法。在JSON协议中,最基本的数据结构只有两种。第一种是数组结构,该结构类似于PHP中的列表数组,结构如下。
["james","iris"]
第二种是对象结构,该结构非常类似于PHP中的散列数组,结构如下。
{"id":1,"name":"james"}
当然,将以上两种结构结合起来就可以产生其他形式的数据结构,比如对象数组,也就是类似于PHP中的“散列数组列表”的形式,结构如下。
[
{"id":1,"name":"james"},
{"id":2,"name":"iris"}
]
另外,JSON协议几乎支持所有主流语言的客户端,当然也包括PHP语言。在PHP中使用JSON非常方便,在PHP 5.2版本之后,PHP语言已经内置了JSON的加解码函数,即json_encode和json_decode。接下来,让我们来分析一下代码清单3-14中的逻辑代码。
代码清单 3-14
<?php
// 原始数据
$arr = array(
array(
"id" => 1,
"name" => "James"
),
array(
"id" => 2,
"name" => "Iris"
)
);
// 数组转换为JSON格式
$str = json_encode($arr);
echo "Array => JSON : ".$str."\n";
// JSON转换为数组格式
echo "JSON => Array : ";
$arr = json_decode($str);
print_r($arr);
?>
以上代码演示了如何使用PHP内置的加解码函数来进行JSON数据和PHP数组结构之间的相互转换,运行结果如图3-14所示。
这里随便提一下,在Android中我们使用org.json包来进行JSON加解码工作,JSON数组格式可使用JSONArray类处理,而对象结构则使用JSONObject类处理。关于Android使用JSON的具体使用方法和实例我们将在本书第7章的7.3.3节中做详细介绍。