如何在PHP中解析json PHP解析JSON
如何在PHP中解析json
目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。
从5.2版本开始,PHP原生提供json_encode()和json_decode()函数,前者用于编码,后者用于解码。
一、json_encode()
该函数主要用来将数组和对象,转换为json格式。先看一个数组转换的例子:
$arr = array (a=>1,b=>2,c=>3,d=>4,e=>5)
echo json_encode($arr)
结果为
{"a":1,"b":2,"c":3,"d":4,"e":5}
由于json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null。当中文使用GB2312编码,或者外文使用ISO-8859-1编码的时候,这一点要特别注意。
二、索引数组和关联数组
PHP支持两种数组,一种是只保存"值"(value)的索引数组(indexed array),另一种是保存"名值对"(name/value)的关联数组(associative array)。
由于javascript不支持关联数组,所以json_encode()只将索引数组(indexed array)转为数组格式,而将关联数组(associative array)转为对象格式。
比如,现在有一个索引数组
$arr = Array(one, two, three)
echo json_encode($arr)
结果为:
["one","two","three"]
三、类(class)的转换
下面是一个PHP的类: class Foo { const ERROR_CODE = 404 public $public_ex = this is public private $private_ex = this is private! protected $protected_ex = this should be protected public function getErrorCode() { return self::ERROR_CODE } }
现在,对这个类的实例进行json转换:
$foo = new Foo
$foo_json = json_encode($foo)
echo $foo_json
输出结果是
{"public_ex":"this is public"}
可以看到,除了公开变量(public),其他东西(常量、私有变量、方法等等)都遗失了。
PHP解析JSON
echo $json->a[0]->date 
//数组和普通数组一样,json对象使用对象序列化,上面的json意义上等价于():
class subobj
{
    var $date=20150101
}
class obj
{
    var $a=array(new subobj())
}
$json=new obj()
php怎么解析这种json数据格式
转为数组
$json={"id":"2","password":"d713344cbf1348813c9958b679339f4f"}
$arr=json_decode($json)
print_r($arr)
?>
php怎么解析出多维的json?
$json= {"name":"HBuilder","email":"hhhh@163.com","data":[{"name":"aaa","email":"aaaa@163.com","password":"kjkdsjfksd"},{"name":"bbb","email":"bbbb@163.com","password":"bbbb"}]}
$obj = json_decode($json)
$data=$obj[data]
print_r($data)
php 处理json字符串
定义一个php二维数组,把这个数组传给json_encode函数处理后转化位json格式,赋值给userinto,输出来。
eval() 函数把字符串按照 PHP 代码来计算。
如:
<?php
$string = "beautiful"
$time = "winter"
$str = This is a $string $time morning!
echo $str. "<br />"
eval("$str = "$str"")
echo $str
?>
输出:
This is a $string $time morning!
This is a beautiful winter morning!
php 解析构造JSON字符串
你的代码我给你做了个分段测试结果如下:
$meters = "[[1,7],[4,1]]"
$meters = json_decode($meters,true)
print_r($meters) // 输出结果:Array ( [0] => Array ( [0] => 1 [1] => 7 ) [1] => Array ( [0] => 4 [1] => 1 ) )
$i = 0
while($meters[$i]!= NULL)
{
if($meters[$i][0] != 4 )
{
echo "i =".$i."
"
$meter = array()
$meter[] = 4
$meter[] = 1
$meters[]=$meter
print_r($meters) // 输出结果:Array ( [0] => Array ( [0] => 1 [1] => 7 ) [1] => Array ( [0] => 4 [1] => 1 ) [2] => Array ( [0] => 4 [1] => 1 ) )
}
$i
}
echo json_encode($meters) // 输出结果:[[1,7],[4,1],[4,1]]
?>
如果不执行 if($meters[$i][0] != 4 )里的语句时,输出[[1,7],[4,1]],之所以输出[[1,7],[4,1],[4,1]],是因为你代码进了if($meters[$i][0] != 4 )这个判断,执行了里面的语句!你有什么问题可以直接私聊我,我一直在线!
如何解决php中json
1. json_decode()
json_decode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)
json_decode — 对 JSON 格式的字符串进行编码
说明
mixed json_decode ( string $json [, bool $assoc ] )
接受一个 JSON 格式的字符串并且把它转换为 PHP 变量
参数
json
待解码的 json string 格式的字符串。
assoc
当该参数为 TRUE 时,将返回 array 而非 object 。
返回值
Returns an object or if the optional assoc parameter is TRUE, an associative array is instead returned. 
2.json_encode()
json_encode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)
json_encode — 对变量进行 JSON 编码
Report a bug 说明
string json_encode ( mixed $value [, int $options = 0 ] )
返回 value 值的 JSON 形式
Report a bug 参数
value
待编码的 value ,除了resource 类型之外,可以为任何数据类型
该函数只能接受 UTF-8 编码的数据
options
由以下常量组成的二进制掩码: JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_UNESCAPED_UNICODE.
Report a bug 返回值
编码成功则返回一个以 JSON 形式表示的 string 或者在失败时返回 FALSE 。
Report a bug 更新日志
版本 说明
5.4.0 options 参数增加常量: JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, 和 JSON_UNESCAPED_UNICODE。
5.3.3 options 参数增加常量:JSON_NUMERIC_CHECK。
5.3.0 增加 options 参数.