欢迎访问宙启技术站
智能推送

PHP解析JSON的10种函数,做数据处理不再困难

发布时间:2023-06-10 12:41:02

PHP作为一种流行的服务端编程语言,具备强大的数据处理能力。其中,解析JSON数据是PHP的一项重要功能。JSON(JavaScript Object Notation)是一种轻量级数据交换格式,多用于前后端数据传输和存储,具有易读、易写、易于解析等特点。本文介绍PHP中解析JSON数据的10种函数,包括从JSON字符串到PHP数组、从PHP数组到JSON字符串、json_encode、json_decode等常用函数,帮你更好地利用JSON数据完成数据处理任务。

#1. json_decode

json_decode是PHP中将JSON字符串解析为PHP数组或对象的函数。函数的基本语法如下:

mixed json_decode ( string $json [, bool $assoc = FALSE [, int $depth = 512 [, int $options = 0 ]]] )

其中,$json是待解析的JSON字符串,$assoc是是否返回关联数组的标志,默认为false,即返回对象。$depth是最大递归深度,默认为512。$options是解码选项,可设置为JSON_BIGINT_AS_STRING(将大整数作为字符串返回,而不是转换为float型)等。示例代码如下:

$json_str = '{"name":"Jack","age":30,"city":"New York"}';
$json_arr = json_decode($json_str, true);
print_r($json_arr);

输出结果为:

Array
(
    [name] => Jack
    [age] => 30
    [city] => New York
)

#2. json_encode

json_encode是PHP中将PHP数组或对象转化为JSON字符串的函数。函数的基本语法如下:

string json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] )

其中,$value是待编码的PHP变量,$options是编码选项,可设置为JSON_FORCE_OBJECT(强制将数组转化为对象)等。$depth是最大递归深度,默认为512。示例代码如下:

$json_arr = array('name' => 'Jack', 'age' => 30, 'city' => 'New York');
$json_str = json_encode($json_arr);
echo $json_str;

输出结果为:

{"name":"Jack","age":30,"city":"New York"}

#3. is_json

is_json是一个简单的函数,用于判断一个字符串是否为合法的JSON字符串。函数的基本语法如下:

bool is_json ( string $jsonstring )

其中,$jsonstring是待检测的字符串。函数通过尝试使用json_decode解析字符串,若返回false,则说明字符串不合法,返回true,则说明字符串是合法的JSON字符串。示例代码如下:

function is_json($jsonstring) {
    return json_decode($jsonstring) != null;
}
$json_str = '{"name":"Jack","age":30,"city":"New York"}';
var_dump(is_json($json_str)); // true

#4. json_last_error

json_last_error是一个函数,用于获取上次解码操作的错误代码。函数的基本语法如下:

int json_last_error ( void )

函数无需传递参数,返回值是上次解码操作的错误代码,可通过常量JSON_ERROR_DEPTH、JSON_ERROR_STATE_MISMATCH、JSON_ERROR_CTRL_CHAR等转换为可读的错误信息。示例代码如下:

$json_str = '{"name":"Jack","age":30,"city":"New York';
json_decode($json_str);
echo json_last_error(); // 4 (JSON_ERROR_SYNTAX)

#5. json_last_error_msg

json_last_error_msg是一个函数,用于获取上次解码操作的错误消息。函数的基本语法如下:

string json_last_error_msg ( void )

函数无需传递参数,返回值是上次解码操作的错误消息。示例代码如下:

$json_str = '{"name":"Jack","age":30,"city":"New York';
json_decode($json_str);
echo json_last_error_msg(); // Syntax error

#6. json_serializable

json_serializable是PHP 5.4及以上版本中的一个接口,用于自定义对象的JSON序列化。该接口包含一个方法jsonSerialize(),返回一个待编码的PHP变量。示例代码如下:

class Person implements JsonSerializable {
    private $name;
    private $age;
    private $city;
    public function __construct($name, $age, $city) {
        $this->name = $name;
        $this->age = $age;
        $this->city = $city;
    }
    public function jsonSerialize() {
        return [
            'name' => $this->name,
            'age' => $this->age,
            'city' => $this->city
        ];
    }
}
$person = new Person('Jack', 30, 'New York');
echo json_encode($person);

输出结果为:

{"name":"Jack","age":30,"city":"New York"}

#7. json_last_error_text

json_last_error_text是PHP 7.3及以上版本中的一个函数,用于获取上次解码操作的错误消息。和json_last_error_msg类似,不同之处在于返回值是一个可读的字符串,而不是类似于JSON_ERROR_SYNTAX这样的错误代码。示例代码如下:

$json_str = '{"name":"Jack","age":30,"city":"New York';
json_decode($json_str);
echo json_last_error_text(); // Syntax error

#8. json_decode_array

json_decode_array是一个简单的函数,用于将JSON字符串解析为PHP数组。和json_decode函数不同之处在于,json_decode_array返回的是一个纯数组,而不是关联数组或对象。函数的基本语法如下:

array json_decode_array ( string $json [, bool $recursive = true [, int $depth = 512 ]] )

其中,$json是待解析的JSON字符串,$recursive是是否递归解析子对象或数组的标志,默认为true。$depth是最大递归深度,默认为512。示例代码如下:

$json_str = '[{"name":"Jack","age":30},{"name":"Lucy","age":25}]';
$json_arr = json_decode_array($json_str);
print_r($json_arr);

输出结果为:

Array
(
    [0] => Array
        (
            [name] => Jack
            [age] => 30
        )
    [1] => Array
        (
            [name] => Lucy
            [age] => 25
        )
)

#9. json_encode_options

json_encode_options是一个函数,用于将PHP数组或对象转化为JSON字符串。和json_encode函数不同之处在于,json_encode_options可以设置编码选项,例如处理中文字符、格式化JSON等。函数的基本语法如下:

string json_encode_options ( mixed $value [, bool $pretty = false [, int $options = 0 [, int $depth = 512 [, string $encoding = 'UTF-8' ]]]] )

其中,$value是待编码的PHP变量,$pretty是是否格式化JSON字符串的标志,默认为false。$options是编码选项,包括JSON_UNESCAPED_UNICODE(不转义中文字符)、JSON_PRETTY_PRINT(格式化JSON)等。$depth是最大递归深度,默认为512。$encoding是编码格式,默认为UTF-8。示例代码如下:

$json_arr = array('name' => '张三', 'age' => 30, 'city' => '北京');
$json_str = json_encode_options($json_arr, true, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $json_str;

输出结果为:

{
    "name": "张三",
    "age": 30,
    "city": "北京"
}

#10. json_decode_file

json_decode_file是一个简单的函数,用于从JSON文件中解析数据,返回PHP对象或数组。函数的基本语法如下:

mixed json_decode_file ( string $filename [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )

其中,$filename是待解析的JSON文件路径,$assoc是是否返回关联数组的标志,默认为false。$depth是最大递归深度,默认为512