Detailed explanation and examples of php json_encode and json_decode

不言
Release: 2023-03-23 17:12:02
Original
1855 people have browsed it

The content shared with you in this article is about the detailed explanation and examples of php json_encode and json_decode. It has a certain reference value. Friends in need can refer to it.

This article mainly This article introduces the detailed explanation and examples of php json_encode and json_decode. Friends who need it can refer to the following article link: http://www.jb51 .net/article/99816.htm

## 1. json_encode()

This function is mainly used to convert arrays and objects into json format. Let’s first look at an example of array conversion:

$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);  
echo json_encode($arr); 
Copy after login

The result is

{"a":1,"b":2,"c":3,"d":4,"e":5} <br>
Copy after login

and then look at an example of object conversion:

$obj->body      = &#39;another post&#39;;  
$obj->id       = 21;  
$obj->approved    = true;  
$obj->favorite_count = 1;  
$obj->status     = NULL;  
echo json_encode($obj); 
Copy after login

The result is


##
{  "body":"another post",  
  "id":21,  
  "approved":true,  
  "favorite_count":1,  
  "status":null  }
Copy after login

Since json only accepts utf-8 encoded characters, json_encode The parameters of () must be UTF-8 encoded, otherwise you will get null characters or null. When Chinese uses GB2312 encoding, or foreign languages ​​use ISO-8859-1 encoding, special attention should be paid to this point.


2. Index array and associative array

PHP supports two types of arrays, one is to save only "value" (value ), and the other is an associative array that stores name/value pairs.

Since JavaScript does not support associative arrays, json_encode() only converts the indexed array to array format, and converts the associative array to object format.

比如,现在有一个索引数组



$arr = Array(&#39;one&#39;, &#39;two&#39;, &#39;three&#39;);  
echo json_encode($arr); 
Copy after login

结果为:

["one","two","three"]  

如果将它改为关联数组:



$arr = Array(&#39;1&#39;=>&#39;one&#39;, &#39;2&#39;=>&#39;two&#39;, &#39;3&#39;=>&#39;three&#39;);
echo json_encode($arr); 
Copy after login

结果就变了:

{"1":"one","2":"two","3":"three"}
Copy after login

注意,数据格式从"[]"(数组)变成了"{}"(对象)。

如果你需要将"索引数组"强制转化成"对象",可以这样写

json_encode( (object)$arr ); 
Copy after login



或者



json_encode ( $arr, JSON_FORCE_OBJECT ); 
Copy after login


三、类(class)的转换

下面是一个PHP的类:

class Foo {  
    const   ERROR_CODE = &#39;404&#39;;  
    public  $public_ex = &#39;this is public&#39;;  
    private  $private_ex = &#39;this is private!&#39;;  
    protected $protected_ex = &#39;this should be protected&#39;;
   
    public function getErrorCode() {  
      return self::ERROR_CODE;  
    }  
  }
Copy after login



现在,对这个类的实例进行json转换:



$foo = new Foo;  
$foo_json = json_encode($foo);  
echo $foo_json; 
Copy after login

输出结果是

{"public_ex":"this is public"}
Copy after login



可以看到,除了公开变量(public),其他东西(常量、私有变量、方法等等)都遗失了。


四、json_decode()

该函数用于将json文本转换为相应的PHP数据结构。下面是一个例子:

$json = &#39;{"foo": 12345}&#39;;
   
$obj = json_decode($json);  
print $obj->{&#39;foo&#39;}; // 12345 
Copy after login

通常情况下,json_decode()总是返回一个PHP对象,而不是数组。比如:

$json = &#39;{"a":1,"b":2,"c":3,"d":4,"e":5}&#39;;
var_dump(json_decode($json));
Copy after login



结果就是生成一个PHP对象:



object(stdClass)#1 (5) {  
  ["a"] => int(1)    ["b"] => int(2)    ["c"] => int(3)    ["d"] => int(4)    ["e"] => int(5)  
} 
Copy after login

如果想要强制生成PHP关联数组,json_decode()需要加一个参数true:

$json = &#39;{"a":1,"b":2,"c":3,"d":4,"e":5}&#39;;
 
var_dump(json_decode($json,true)); 
Copy after login

结果就生成了一个关联数组:

array(5) {  
   ["a"] => int(1)     ["b"] => int(2)     ["c"] => int(3)     ["d"] => int(4)     ["e"] => int(5)  
} 
Copy after login


五、json_decode()的常见错误

下面三种json写法都是错的,你能看出错在哪里吗?

$bad_json = "{ &#39;bar&#39;: &#39;baz&#39; }";  
$bad_json = &#39;{ bar: "baz" }&#39;;  
$bad_json = &#39;{ "bar": "baz", }&#39;; 
Copy after login



对这三个字符串执行json_decode()都将返回null,并且报错。

第一个的错误是,json的分隔符(delimiter)只允许使用双引号,不能使用单引号。第二个的错误是,json名值对的"名"(冒号左边的部分),任何情况下都必须使用双引号。第三个的错误是,最后一个值之后不能添加逗号(trailing comma)。

另外,json只能用来表示对象(object)和数组(array),如果对一个字符串或数值使用json_decode(),将会返回null。

var_dump(json_decode("Hello World")); //null
Copy after login

感谢阅读,希望能帮助到大家

相关推荐:

php中的json_encode()和json_decode()函数详解

PHP中json_decode与json_encode使用方法分享


The above is the detailed content of Detailed explanation and examples of php json_encode and json_decode. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!