php中json_decode()和json_encode()的使用方法
发布时间:2025-05-21 20:26:20 发布人:远客网络
一、php中json_decode()和json_encode()的使用方法
1、PHP中json_decode和json_encode的使用方法:
2、json_encode函数用于将PHP变量转换为JSON字符串。它接受一个PHP的值并将其转换为JSON格式。语法如下:
3、echo json_encode;//输出:"{"name":"John","age":30}"
4、此函数在输出时,会自动把PHP的数组转换为JSON格式的数组形式,也可以处理更复杂的数据结构。当参数`options`和`depth`被设置时,它们可以影响编码过程和结果字符串的格式。默认选项`JSON_ALL_NONASSOC`使得关联数组总是编码为JSON对象形式。如需将数组编码为JSON数组形式,可以使用选项`JSON_FORCE_ARRAY`。
5、json_decode函数用于将JSON字符串转换为PHP变量。它接受一个JSON格式的字符串并将其转换为PHP的值。语法如下:
6、$json='{"name":"John","age":30}';// JSON字符串数据
7、$data= json_decode;//解码后得到一个PHP对象或数组,取决于第二个参数是否设置为true。如果第二个参数为true,返回关联数组;否则返回对象。默认为对象模式。
8、echo$data->name;//输出:"John"。输出值取决于上面函数返回的值的类型。
9、示例续行注释演示默认情况和不同参数的用法区别,介绍了在不同情况下的数据读取方式。由于解释同一个主题的表述可能有相似的重复性句式存在在所难免。理解了基本原理即可快速识别处理方式差异的细节,因此在精简直接的解释中没有大量重复的结构词汇如“首先”、“其次”等。同时,对重点内容进行了加粗处理以突出重点信息,字数控制在预期范围内。
二、如何正确运用PHP json_encode函数进行中文转换
在 php中使用 json_encode()内置函数(php> 5.2)可以使用得 php中数据可以与其它语言很好的传递并且使用它。这个函数的功能是将数值转换成json数据存储格式,但是转换后的中文会变成Unicode编码。\x0d\x0a[php] view plaincopyprint?\x0d\x0a'希亚', \x0d\x0a'Age'=>20 \x0d\x0a); \x0d\x0a \x0d\x0a$jsonencode= json_encode($arr); \x0d\x0aecho$jsonencode; \x0d\x0a?> \x0d\x0a程序运行结果如下:\x0d\x0a[php] view plaincopyprint?\x0d\x0a{"Name":null,"Age":20} \x0d\x0ajson_encode函数中中文被编码成 null了,Google了一下,很简单,为了与前端紧密结合,Json只支持 utf-8编码,我认为是前端的 Javascript也是 utf-8的原因。\x0d\x0a[php] view plaincopyprint?\x0d\x0aiconv('gb2312','utf-8','这里是中文标题'), \x0d\x0a'body'=>'abcd...' \x0d\x0a); \x0d\x0a \x0d\x0aecho json_encode($array); \x0d\x0a?> \x0d\x0a这个程序的运行结果为:\x0d\x0a[php] view plaincopyprint?\x0d\x0a{"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"abcd..."} \x0d\x0a数组中所有中文在json_encode之后都不见了或者出现\u2353等。解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来。\x0d\x0a[php] view plaincopyprint?\x0d\x0a 1000){ \x0d\x0a die('possible deep recursion attack'); \x0d\x0a} \x0d\x0a foreach($array as$key=>$value){ \x0d\x0a if(is_array($value)){ \x0d\x0a arrayRecursive($array[$key],$function,$apply_to_keys_also); \x0d\x0a} else{ \x0d\x0a$array[$key]=$function($value); \x0d\x0a} \x0d\x0a \x0d\x0a if($apply_to_keys_also&& is_string($key)){ \x0d\x0a$new_key=$function($key); \x0d\x0a if($new_key!=$key){ \x0d\x0a$array[$new_key]=$array[$key]; \x0d\x0a unset($array[$key]); \x0d\x0a} \x0d\x0a} \x0d\x0a} \x0d\x0a$recursive_counter--; \x0d\x0a} \x0d\x0a \x0d\x0a/************************************************************** \x0d\x0a* \x0d\x0a*将数组转换为JSON字符串(兼容中文) \x0d\x0a*@param array$array要转换的数组 \x0d\x0a*@return string转换得到的json字符串 \x0d\x0a*@access public \x0d\x0a* \x0d\x0a*************************************************************/ \x0d\x0afunction JSON($array){ \x0d\x0a arrayRecursive($array,'urlencode', true); \x0d\x0a$json= json_encode($array); \x0d\x0a return urldecode($json); \x0d\x0a} \x0d\x0a \x0d\x0a$array= array \x0d\x0a( \x0d\x0a'Name'=>'希亚', \x0d\x0a'Age'=>20 \x0d\x0a); \x0d\x0a\x0d\x0aecho JSON($array); \x0d\x0a?> \x0d\x0a这次成功了,运行结果如下:\x0d\x0a[php] view plaincopyprint?\x0d\x0a{"Name":"希亚","Age":"20"}
三、如何正确运用PHP json
从5.2版本开始,PHP原生提供json_encode()和json_decode()函数,前者用于编码,后者用于解码。
该函数主要用来将数组和对象,转换为json格式。先看一个数组转换的例子:
$arr= array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
{"a":1,"b":2,"c":3,"d":4,"e":5}
$obj->body='another post';
由于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');
$arr= Array('1'=>'one','2'=>'two','3'=>'three');
{"1":"one","2":"two","3":"three"}
注意,数据格式从"[]"(数组)变成了"{}"(对象)。
如果你需要将"索引数组"强制转化成"对象",可以这样写
json_encode($arr, JSON_FORCE_OBJECT);
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(){
现在,对这个类的实例进行json转换:
{"public_ex":"this is public"}
可以看到,除了公开变量(public),其他东西(常量、私有变量、方法等等)都遗失了。
该函数用于将json文本转换为相应的PHP数据结构。下面是一个例子:
$json='{"foo": 12345}';
print$obj->{'foo'};// 12345
通常情况下,json_decode()总是返回一个PHP对象,而不是数组。比如:
$json='{"a":1,"b":2,"c":3,"d":4,"e":5}';
如果想要强制生成PHP关联数组,json_decode()需要加一个参数true:
$json='{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json),true);
下面三种json写法都是错的,你能看出错在哪里吗?
$bad_json="{'bar':'baz'}";
$bad_json='{ bar:"baz"}';
$bad_json='{"bar":"baz",}';
对这三个字符串执行json_decode()都将返回null,并且报错。
第一个的错误是,json的分隔符(delimiter)只允许使用双引号,不能使用单引号。第二个的错误是,json名值对的"名"(冒号左边的部分),任何情况下都必须使用双引号。第三个的错误是,最后一个值之后不能添加逗号(trailing comma)。
另外,json只能用来表示对象(object)和数组(array),如果对一个字符串或数值使用json_decode(),将会返回null。
var_dump(json_decode("Hello World"));//null