zoukankan      html  css  js  c++  java
  • PHP json_encode函数的参数说明

    PHP json_encode函数的参数说明

    一、总结

    一句话总结:

    · json_encode常常被用于将数组转换成json格式的字符串来表示,但是json_encode的第一个参数却并不一定是数组格式,第一个参数可以为对象,数组,字符串。
    · object和array类型转换为json字符串之后没有差别,而string被json_encode之后,string中的【'】,【"】,【】,【/】会被转义。

    1、json_encode第二个参数稍微常见例子?

    JSON_UNESCAPED_UNICODE (integer) 以字面编码多字节 Unicode 字符(默认是编码成 uXXXX)。 自 PHP 5.4.0 起生效。

    JSON_HEX_TAG (integer) 所有的 < 和 > 转换成 u003C 和 u003E。 自 PHP 5.3.0 起生效。

    JSON_HEX_AMP (integer) 所有的 & 转换成 u0026。 自 PHP 5.3.0 起生效。

    JSON_HEX_APOS (integer) 所有的 ' 转换成 u0027。 自 PHP 5.3.0 起生效。

    JSON_HEX_QUOT (integer) 所有的 " 转换成 u0022。 自 PHP 5.3.0 起生效。

    JSON_FORCE_OBJECT (integer) 使一个非关联数组输出一个类(Object)而非数组。 在数组为空而接受者需要一个类(Object)的时候尤其有用。 自 PHP 5.3.0 起生效。

    JSON_NUMERIC_CHECK (integer) 将所有数字字符串编码成数字(numbers)。 自 PHP 5.3.3 起生效。

    JSON_BIGINT_AS_STRING (integer) 将大数字编码成原始字符原来的值。 自 PHP 5.4.0 起生效。

    JSON_PRETTY_PRINT (integer) 用空白字符格式化返回的数据。 自 PHP 5.4.0 起生效。

    JSON_UNESCAPED_SLASHES (integer) 不要编码 /。 自 PHP 5.4.0 起生效。

    JSON_UNESCAPED_UNICODE (integer) 以字面编码多字节 Unicode 字符(默认是编码成 uXXXX)。 自 PHP 5.4.0 起生效。

    二、PHP json_encode函数的参数说明

    转自或参考:PHP json_encode函数的参数说明
    https://blog.csdn.net/it_r00t/article/details/83993809


    今天主要看了一下json_encode函数的参数以及使用,以下主要是对json_encode第2/3个参数的一些自己认为的解析。

    首先看一下php.net中关于json_encode的说明:

    Description

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

    Returns a string containing the JSON representation of the supplied value // 返回json格式的字符串

    The encoding is affected by the supplied options and additionally the encoding of float values depends on the value of serialize_precision. // 所返回json格式的字符串取决于第二个参数

    一: json_encode常常被用于将数组转换成json格式的字符串来表示,但是json_encode的第一个参数却并不一定是数组格式,第一个参数可以为对象,数组,字符串。

    
    $array = [
          'a' => 'he',
          'b' => 'llo',
          'c' => 'world',
          'd' => [
                1 => 'a',
                2 => 'b',
                3 => 'c'
          ]
    ];
    // 参数为普通数组    string(62) "{"a":"he","b":"llo","c":"world","d":{"1":"a","2":"b","3":"c"}}"
    var_dump(json_encode($array));
    
    // 将数组先转为json格式字符串,再使用json_decode转为对象,之后详细研究json_decode的参数,使用等
    $obj = json_decode(json_encode($array));
    
    
    // 参数为对象    string(62) "{"a":"he","b":"llo","c":"world","d":{"1":"a","2":"b","3":"c"}}"
    var_dump(json_encode($obj));
    
    // 参数为字符串
    // string(90) ""{"a":"he","b":"llo","c":"world","d":{"1":"a","2":"b","3":"c"}}""
    var_dump(json_encode(json_encode($obj)));
    
    var_dump(json_encode('h"el/l[o'));  // string(14) ""h"e\l/l[o""
    var_dump('h"el/l[o'); //string(9) "h"el/l[o"

    可以发现object和array类型转换为json字符串之后没有差别,而string被json_encode之后,string中的【'】,【"】,【】,【/】会被转义。

    二:接下来看一下第二个参数:
    options参考选自原文https://blog.csdn.net/qd824692746/article/details/50912723

    JSON_HEX_TAG (integer) 所有的 < 和 > 转换成 u003C 和 u003E。 自 PHP 5.3.0 起生效。

    JSON_HEX_AMP (integer) 所有的 & 转换成 u0026。 自 PHP 5.3.0 起生效。

    JSON_HEX_APOS (integer) 所有的 ' 转换成 u0027。 自 PHP 5.3.0 起生效。

    JSON_HEX_QUOT (integer) 所有的 " 转换成 u0022。 自 PHP 5.3.0 起生效。

    JSON_FORCE_OBJECT (integer) 使一个非关联数组输出一个类(Object)而非数组。 在数组为空而接受者需要一个类(Object)的时候尤其有用。 自 PHP 5.3.0 起生效。

    JSON_NUMERIC_CHECK (integer) 将所有数字字符串编码成数字(numbers)。 自 PHP 5.3.3 起生效。

    JSON_BIGINT_AS_STRING (integer) 将大数字编码成原始字符原来的值。 自 PHP 5.4.0 起生效。

    JSON_PRETTY_PRINT (integer) 用空白字符格式化返回的数据。 自 PHP 5.4.0 起生效。

    JSON_UNESCAPED_SLASHES (integer) 不要编码 /。 自 PHP 5.4.0 起生效。

    JSON_UNESCAPED_UNICODE (integer) 以字面编码多字节 Unicode 字符(默认是编码成 uXXXX)。 自 PHP 5.4.0 起生效。

    大家可以参考以上罗列出来的常量测试一下。也可以选取自己业务逻辑上的来达到自己的目的。

    三:接下来说一下第三个参数,在本人购买的PHP中文手册中发现json_encode函数中只有以上两个参数,并没有第三个参数depth,在查阅PHP官方文档中是有这个参数的,但是文档中并没有详细的解释以及示例。猜测大概率是PHP版本的问题,也许购买的中文手册是基于旧版本的,官方文档是最新版。在测试中发现第三个参数的不同导致的输出是有区别的。

    // 数组深度为2
      $array = [
              'a' => '"/hello',
              'b' => 'world',
              'c' => '/php_json_decode',
              'd' => [
                      1 => '"/php',
                      2 => '//js',
                      3 => 'python',
                      4 => 'golang'
              ]
          ];
    
    var_dump(json_encode($array,0,1));  // bool(false)
    
    
    var_dump(json_encode($array,0,2));
    // string(120) "{"a":""\/hello","b":"\world","c":"/php_json_decode","d":{"1":""\/php","2":"//\js","3":"python","4":"golang"}}"
    
    var_dump(json_encode($array,0,3));
    // string(120) "{"a":""\/hello","b":"\world","c":"/php_json_decode","d":{"1":""\/php","2":"//\js","3":"python","4":"golang"}}"
    
    var_dump(json_encode($array,0,4));
    // string(120) "{"a":""\/hello","b":"\world","c":"/php_json_decode","d":{"1":""\/php","2":"//\js","3":"python","4":"golang"}}"
    
    
      // 数组深度为3
      $array = [
              'a' => '"/hello',
            	'b' => 'world',
            	'c' => '/php_json_decode',
              'd' => [
                      1 => '"/php',
                      2 => '//js',
                      3 => 'python',
                      4 => 'golang'
              ],
              'e' => [
                      'xxx' => [
                            'hello' => 'world'
                      ]
              ]
          ];
    
        var_dump(json_encode($array,0,1));
        // bool(false)
    
        var_dump(json_encode($array,0,2));
        // bool(false)
    
        var_dump(json_encode($array,0,3));
        // string(150) "{"a":""\/hello","b":"\world","c":"/php_json_decode","d":{"1":""\/php","2":"//\js","3":"python","4":"golang"},"e":{"xxx":{"hello":"world"}}}"
    
        var_dump(json_encode($array,0,4));
        // string(150) "{"a":""\/hello","b":"\world","c":"/php_json_decode","d":{"1":""\/php","2":"//\js","3":"python","4":"golang"},"e":{"xxx":{"hello":"world"}}}"
    

    发现假如depth的值小于数组的维度的话会输出bool(false),反之正常解析成json串。不知道这个字段存在的意义,希望各位大佬给出正解。

     
  • 相关阅读:
    butter
    医院设置
    NOIP 2000 进制转换
    图的M 着色问题
    闭合区域面积统计
    字符序列
    装载问题
    n皇后问题
    跳马问题
    数独
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/11682199.html
Copyright © 2011-2022 走看看