配色: 字号:
php中json_decode()和json_encode()的使用方法
2016-08-27 | 阅:  转:  |  分享 
  
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。

献花(0)
+1
(本文系网络学习天...首藏)