• PHP JSON的解析和创建



    PHP JSON的解析和创建

    JSON(全称“JavaScript Object Notation”)是一种轻量级的数据交换格式,易于读写,广泛应用于 Web 开发领域。本节我们来介绍一下在 PHP 中如何创建和解析 JSON 数据。

    PHP 中提供了 json_encode() 和 json_decode() 两个函数分别创建和解析 JSON 数据,其中:

    • json_encode():可以将变量转换为 JSON 格式;
    • json_decode():可以对 JSON 格式的字符串进行解析。

    json_encode()

    json_encode() 函数能够将一个 PHP 变量转换为 JSON 数据,其语法格式如下:

    json_encode(mixed $value, int $options = 0, int $depth = 512): string | false

    参数说明如下:

    • $value:要转换的变量,变量可以是任意数据类型;
    • $options:可选参数,默认值为 0,可选值为以下 PHP 常量:JSON_FORCE_OBJECT、JSON_HEX_QUOT、JSON_HEX_TAG、JSON_HEX_AMP、JSON_HEX_APOS、JSON_INVALID_UTF8_IGNORE、JSON_INVALID_UTF8_SUBSTITUTE、 JSON_NUMERIC_CHECK、JSON_PARTIAL_OUTPUT_ON_ERROR、JSON_PRESERVE_ZERO_FRACTION、JSON_PRETTY_PRINT、JSON_UNESCAPED_LINE_TERMINATORS、JSON_UNESCAPED_SLASHES、JSON_UNESCAPED_UNICODE、JSON_THROW_ON_ERROR。关于这些常量了解即可,一般不怎么使用,它们的具体含义您可以通过 JSON 常量查阅;
    • $depth:可选参数,用来设置递归的最大深度,它的值必须大于 0,默认值为 512,同 $options 参数一样,该参数同样不怎么使用。

    若转换成功,json_encode() 函数会返回字符串类型的转换结果,若转换失败,则返回 false。

    【示例】使用 json_encode() 函数将 PHP 变量转换为 JSON 格式:

    
        $arr = [
            "title"     => "JSON教程",
            "author"    => "C语言中文网",
            "url"       => "http://c.biancheng.net/",
            "catalogue" => [
                "JSON是什么?",
                "JSONP是什么?",
                "JSON语法规则"
            ]
        ];
        echo json_encode($arr);
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    运行结果如下:

    {“title”:“JSON\u6559\u7a0b”,“author”:“C\u8bed\u8a00\u4e2d\u6587\u7f51”,“url”:“http://c.biancheng.net/”,“catalogue”:[“JSON\u662f\u4ec0\u4e48\uff1f”,“JSONP\u662f\u4ec0\u4e48\uff1f”,“JSON\u8bed\u6cd5\u89c4\u5219”]}

    通过运行结果可以看出,在使用 json_encode() 函数将变量转换为 JSON 数据时,会将变量中的中文字符编码为 Unicode 字符(\uXXXX 格式的字符),如果不需要这样的转换,将 json_encode() 函数的第二个参数设置为 JSON_UNESCAPED_UNICODE 即可,如下例所示:

    
        $arr = [
            "title"     => "JSON教程",
            "author"    => "C语言中文网",
            "url"       => "http://c.biancheng.net/",
            "catalogue" => [
                "JSON是什么?",
                "JSONP是什么?",
                "JSON语法规则"
            ]
        ];
        echo json_encode($arr,JSON_UNESCAPED_UNICODE );
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    运行结果如下:

    {“title”:“JSON教程”,“author”:“C语言中文网”,“url”:“http://c.biancheng.net/”,“catalogue”:[“JSON是什么?”,“JSONP是什么?”,“JSON语法规则”]}

    json_decode()

    json_decode() 函数能够解析 JSON 格式的字符串,并将解析后的结果保存到一个变量中,其语法格式如下:

    json_decode(string $json, bool $assoc = false, int $depth = 512, int $options = 0): mixed

    参数说明如下:

    • $json:必填参数,要解析的 JSON 字符串;
    • $assoc:可选参数,默认值为 false,若将值设置为 true,那么 json_decode() 函数将返回一个数组;
    • $depth:可选参数,用来设置递归的最大深度,默认值为 512,也可以设置为其它大于 0 的值;
    • $options:可选参数,默认值为 0,可选值为 JSON_BIGINT_AS_STRING、JSON_INVALID_UTF8_IGNORE、JSON_INVALID_UTF8_SUBSTITUTE、JSON_OBJECT_AS_ARRAY、JSON_THROW_ON_ERROR 等常量,可以同时设置多个常量,常量之间使用竖线 | 进行分隔。有关上述常量的含义,您可以通过 PHP 预定义常量查阅。

    若解析成功,json_decode() 函数会返回 JSON 中的数据,若解析失败,或者 JSON 的数据深度超过了递归的限制,则返回 null。

    【示例】使用 json_decode() 函数解析 JSON 数据:

    
        $str = '{"title":"JSON教程","author":"C语言中文网","url":"http:\/\/c.biancheng.net\/","catalogue":["JSON是什么?","JSONP是什么?","JSON语法规则"]}';
        echo "
    ";
        var_dump(json_decode($str, true));
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    运行结果如下:

    array(4) {
        ["title"]=>
        string(10) "JSON教程"
        ["author"]=>
        string(16) "C语言中文网"
        ["url"]=>
        string(23) "http://c.biancheng.net/"
        ["catalogue"]=>
        array(3) {
            [0]=>
            string(16) "JSON是什么?"
            [1]=>
            string(17) "JSONP是什么?"
            [2]=>
            string(16) "JSON语法规则"
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    lightdb oracle模式支持sys_refcursor类型
    记录--一道字节面试题引出的this指向问题
    ACM练习——第五天
    npm install 卡在reify:rxjs: timing reifyNode的解决办法
    leetcode-1.两数之和(哈希表解决)
    11--无重复字符的最长子串
    10-Django项目--Ajax请求
    k8s-10 cni 网络
    Sun Solaris 修改IP地址或者主机名
    shadingjdbc实战分表分库
  • 原文地址:https://blog.csdn.net/m0_62617719/article/details/127837448