Home  >  Article  >  php教程  >  Some notes on the json_encode() and json_decode() functions in php

Some notes on the json_encode() and json_decode() functions in php

高洛峰
高洛峰Original
2016-12-12 09:34:481594browse

一,json语法( php中的json_decode($json)中的$json要符合json语法格式 )

① JSON可以表示三种类型的值

1,简单值。包括整型,字符串型,布尔值和null。例如:5,"hello world",true,null都是有效的JSON数据。其中JSON字符串必须使用双引号(单引号会导致语法错误)。

2,对象。如,{"name":"tony","age":15}。说明①要求属性必须用双引号(不加或者单引号都是错误的)②值可以是简单值(注意若值为字符串,必须用双引号,不能用单引号),也可以是复杂类型的值(对象或数组)。

3,数组。如,[25,true,"tony"]。说明:数组的值也可以是任意类型。

二,php定义对象字面量时,不支持直接书写,如{"a":"11","b":"22"}。这种书写方式在其他语言中被支持,在php中需要按如下方式定义:

①  $a = '{"a":"11","b":"22"}' ;【这是json字符串,不加外面的单引号则是json对象】

②  $b = json_decode($a);

这样$b就是对象字面量了。

三,上述三种数值类型经过json_encode($value)转化后,会输出json格式(此时类型为字符串),如"hello",{},[]。输出的结果可以在其他地方(javascrip,ios,java,php等等)被解析使用。

四,php中改进后的json_encode()和json_decode()函数,支持汉语(原生的不支持汉语)

注:php中不可直接改写原生函数,需要写在类里,作为类的一个方法

static function json_encode($input)
{
// 从 PHP 5.4.0 起, 增加了这个选项.
if (defined('JSON_UNESCAPED_UNICODE')) {
return json_encode($input, JSON_UNESCAPED_UNICODE);
}
 
if (is_string($input)) {
$text = $input;
$text = str_replace('\\', '\\\\', $text);
$text = str_replace(
array("\r", "\n", "\t", "\""),
array('\r', '\n', '\t', '\\"'),
$text);
return '"' . $text . '"';
} else if (is_array($input) || is_object($input)) {
$arr = array();
$is_obj = is_object($input) || (array_keys($input) !== range(0, count($input) - 1));
foreach ($input as $k => $v) {
if($v == null){
$v = 'null';
}
if ($is_obj) {
$arr[] = self::json_encode($k) . ':' . self::json_encode($v);
} else {
$arr[] = self::json_encode($v);
}
}
 
if ($is_obj) {
return '{' . join(',', $arr) . '}';
} else {
return '[' . join(',', $arr) . ']';
}
} else {
return $input . '';
}
}

   


Statement:
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