php中json_decode()和json_encode()的使用方法
1.json_decode()
json_decode
(PHP5>=5.2.0,PECLjson>=1.2.0)
json_decode—对JSON格式的字符串进行编码
说明
mixedjson_decode(string$json[,bool$assoc])
接受一个JSON格式的字符串并且把它转换为PHP变量
参数
json
待解码的jsonstring格式的字符串。
assoc
当该参数为TRUE时,将返回array而非object。
返回值
ReturnsanobjectoriftheoptionalassocparameterisTRUE,anassociativearrayisinsteadreturned.
范例
Example#1json_decode()的例子
复制代码代码如下:
$json=''{"a":1,"b":2,"c":3,"d":4,"e":5}'';
var_dump(json_decode($json));
var_dump(json_decode($json,true));
?>
上例将输出:
复制代码代码如下:
object(stdClass)#1(5){
["a"]=>int(1)
["b"]=>int(2)
["c"]=>int(3)
["d"]=>int(4)
["e"]=>int(5)
}
array(5){
["a"]=>int(1)
["b"]=>int(2)
["c"]=>int(3)
["d"]=>int(4)
["e"]=>int(5)
}
复制代码代码如下:
$data=''[{"Name":"a1","Number":"123","Contno":"000","QQNo":""},{"Name":"a1","Number":"123","Contno":"000","QQNo":""},{"Name":"a1","Number":"123","Contno":"000","QQNo":""}]'';
echojson_decode($data);
结果为:
复制代码代码如下:
Array([0]=>stdClassObject([Name]=>a1[Number]=>123[Contno]=>000[QQNo]=>)[1]=>stdClassObject([Name]=>a1[Number]=>123[Contno]=>000[QQNo]=>)[2]=>stdClassObject([Name]=>a1[Number]=>123[Contno]=>000[QQNo]=>))
可以看出经过json_decode()编译出来的是对象,现在输出json_decode($data,true)试下
复制代码代码如下:
echojson_decode($data,true);
结果:
复制代码代码如下:
Array([0]=>Array([Name]=>a1[Number]=>123[Contno]=>000[QQNo]=>)[1]=>Array([Name]=>a1[Number]=>123[Contno]=>000[QQNo]=>)[2]=>Array([Name]=>a1[Number]=>123[Contno]=>000[QQNo]=>))
可以看出json_decode($data,true)输出的一个关联数组,由此可知json_decode($data)输出的是对象,而json_decode("$arr",true)是把它强制生成PHP关联数组.
2.json_encode()
json_encode
(PHP5>=5.2.0,PECLjson>=1.2.0)
json_encode—对变量进行JSON编码
Reportabug说明
stringjson_encode(mixed$value[,int$options=0])
返回value值的JSON形式
Reportabug参数
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.
Reportabug返回值
编码成功则返回一个以JSON形式表示的string或者在失败时返回FALSE。
Reportabug更新日志
版本说明
5.4.0options参数增加常量:JSON_PRETTY_PRINT,JSON_UNESCAPED_SLASHES,和JSON_UNESCAPED_UNICODE。
5.3.3options参数增加常量:JSON_NUMERIC_CHECK。
5.3.0增加options参数.
Reportabug范例
Example#1Ajson_encode()的例子
复制代码代码如下:
$arr=array(''a''=>1,''b''=>2,''c''=>3,''d''=>4,''e''=>5);
echojson_encode($arr);
?>
以上例程会输出:
复制代码代码如下:
{"a":1,"b":2,"c":3,"d":4,"e":5}
Example#2json_encode()函数中options参数的用法
复制代码代码如下:
$a=array('''',"''bar''",''"baz"'',''&blong&'',"\xc3\xa9");
echo"Normal:",json_encode($a),"\n";
echo"Tags:",json_encode($a,JSON_HEX_TAG),"\n";
echo"Apos:",json_encode($a,JSON_HEX_APOS),"\n";
echo"Quot:",json_encode($a,JSON_HEX_QUOT),"\n";
echo"Amp:",json_encode($a,JSON_HEX_AMP),"\n";
echo"Unicode:",json_encode($a,JSON_UNESCAPED_UNICODE),"\n";
echo"All:",json_encode($a,JSON_HEX_TAG|JSON_HEX_APOS|JSON_HEX_QUOT|JSON_HEX_AMP|JSON_UNESCAPED_UNICODE),"\n\n";
$b=array();
echo"Emptyarrayoutputasarray:",json_encode($b),"\n";
echo"Emptyarrayoutputasobject:",json_encode($b,JSON_FORCE_OBJECT),"\n\n";
$c=array(array(1,2,3));
echo"Non-associativearrayoutputasarray:",json_encode($c),"\n";
echo"Non-associativearrayoutputasobject:",json_encode($c,JSON_FORCE_OBJECT),"\n\n";
$d=array(''foo''=>''bar'',''baz''=>''long'');
echo"Associativearrayalwaysoutputasobject:",json_encode($d),"\n";
echo"Associativearrayalwaysoutputasobject:",json_encode($d,JSON_FORCE_OBJECT),"\n\n";
?>
以上例程会输出:
复制代码代码如下:
Normal:["","''bar''","\"baz\"","&blong&","\u00e9"]
Tags:["\u003Cfoo\u003E","''bar''","\"baz\"","&blong&","\u00e9"]
Apos:["","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"]
Quot:["","''bar''","\u0022baz\u0022","&blong&","\u00e9"]
Amp:["","''bar''","\"baz\"","\u0026blong\u0026","\u00e9"]
Unicode:["","''bar''","\"baz\"","&blong&","é"]
All:["\u003Cfoo\u003E","\u0027bar\u0027","\u0022baz\u0022","\u0026blong\u0026","é"]
Emptyarrayoutputasarray:[]
Emptyarrayoutputasobject:{}
Non-associativearrayoutputasarray:[[1,2,3]]
Non-associativearrayoutputasobject:{"0":{"0":1,"1":2,"2":3}}
Associativearrayalwaysoutputasobject:{"foo":"bar","baz":"long"}
Associativearrayalwaysoutputasobject:{"foo":"bar","baz":"long"}
Example#3连续与非连续数组示例
复制代码代码如下:
echo"连续数组".PHP_EOL;
$sequential=array("foo","bar","baz","blong");
var_dump(
$sequential,
json_encode($sequential)
);
echoPHP_EOL."非连续数组".PHP_EOL;
$nonsequential=array(1=>"foo",2=>"bar",3=>"baz",4=>"blong");
var_dump(
$nonsequwww.shanxiwang.netential,
json_encode($nonsequential)
);
echoPHP_EOL."删除一个连续数组值的方式产生的非连续数组".PHP_EOL;
unset($sequential[1]);
var_dump(
$sequential,
json_encode($sequential)
);
?>
以上例程会输出:
复制代码代码如下:
连续数组
array(4){
[0]=>
string(3)"foo"
[1]=>
string(3)"bar"
[2]=>
string(3)"baz"
[3]=>
string(5)"blong"
}
string(27)"["foo","bar","baz","blong"]"
非连续数组
array(4){
[1]=>
string(3)"foo"
[2]=>
string(3)"bar"
[3]=>
string(3)"baz"
[4]=>
string(5)"blong"
}
string(43)"{"1":"foo","2":"bar","3":"baz","4":"blong"}"
删除一个连续数组值的方式产生的非连续数组
array(3){
[0]=>
string(3)"foo"
[2]=>
string(3)"baz"
[3]=>
string(5)"blong"
}
string(33)"{"0":"foo","2":"baz","3":"blong"}"
复制代码代码如下:
$obj->Name=''a1'';$obj->Number=''123'';
$obj->Contno=''000'';
echojson_encode($obj);
结果为:
复制代码代码如下:
{"Name":"a1",
"Number":"123",
"Contno":"000"
}
可以看出json_encode()和json_decode()是编译和反编译过程,注意json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null。
|
|