Rumah > pembangunan bahagian belakang > tutorial php > 关于php JSON数据格式化的方法

关于php JSON数据格式化的方法

jacklove
Lepaskan: 2023-03-31 08:48:01
asal
3714 orang telah melayarinya

php 的json_encode能把数组转换为json格式的字符串。字符串没有缩进,中文会转为unicode编码,例如\u975a\u4ed4。人阅读比较困难。现在这个方法在json_encode的基础上再进行一次美化处理。使人能方便阅读内容。

1. 使用 json_encode 输出

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<?php

header(&#39;content-type:application/json;charset=utf8&#39;);

$arr = array(

    &#39;status&#39; => true,

    &#39;errMsg&#39; => &#39;&#39;,

    &#39;member&#39; =>array(

        array(

            &#39;name&#39; => &#39;李逍遥&#39;,

            &#39;gender&#39; => &#39;男&#39;

        ),

        array(

            &#39;name&#39; => &#39;赵灵儿&#39;,

            &#39;gender&#39; => &#39;女&#39;

        )

    )

);

echo json_encode($arr);

?>

Salin selepas log masuk

输出:

1

{"status":true,"errMsg":"","member":[{"name":"\u674e\u900d\u9065","gender":"\u7537"},{"name":"\u8d75\u7075\u513f","gender":"\u5973"}]}

Salin selepas log masuk

可以看出,这种格式人阅读很困难。

2. 使用 jsonFormat 输出

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

<?php

/** Json数据格式化

* @param  Mixed  $data   数据

* @param  String $indent 缩进字符,默认4个空格

* @return JSON

*/

function jsonFormat($data, $indent=null){

    // 对数组中每个元素递归进行urlencode操作,保护中文字符

    array_walk_recursive($data, &#39;jsonFormatProtect&#39;);

    // json encode

    $data = json_encode($data);

    // 将urlencode的内容进行urldecode

    $data = urldecode($data);

    // 缩进处理

    $ret = &#39;&#39;;

    $pos = 0;

    $length = strlen($data);

    $indent = isset($indent)? $indent : &#39;    &#39;;

    $newline = "\n";

    $prevchar = &#39;&#39;;

    $outofquotes = true;

    for($i=0; $i<=$length; $i++){

        $char = substr($data, $i, 1);

        if($char==&#39;"&#39; && $prevchar!=&#39;\\&#39;){

            $outofquotes = !$outofquotes;

        }elseif(($char==&#39;}&#39; || $char==&#39;]&#39;) && $outofquotes){

            $ret .= $newline;

            $pos --;

            for($j=0; $j<$pos; $j++){

                $ret .= $indent;

            }

        }

        $ret .= $char;

         

        if(($char==&#39;,&#39; || $char==&#39;{&#39; || $char==&#39;[&#39;) && $outofquotes){

            $ret .= $newline;

            if($char==&#39;{&#39; || $char==&#39;[&#39;){

                $pos ++;

            }

            for($j=0; $j<$pos; $j++){

                $ret .= $indent;

            }

        }

        $prevchar = $char;

    }

    return $ret;

}

/** 将数组元素进行urlencode

* @param String $val

*/

function jsonFormatProtect(&$val){

    if($val!==true && $val!==false && $val!==null){

        $val = urlencode($val);

    }

}

header(&#39;content-type:application/json;charset=utf8&#39;);

$arr = array(

    &#39;status&#39; => true,

    &#39;errMsg&#39; => &#39;&#39;,

    &#39;member&#39; =>array(

        array(

            &#39;name&#39; => &#39;李逍遥&#39;,

            &#39;gender&#39; => &#39;男&#39;

        ),

        array(

            &#39;name&#39; => &#39;赵灵儿&#39;,

            &#39;gender&#39; => &#39;女&#39;

        )

    )

);

echo jsonFormat($arr);

?>

Salin selepas log masuk

输出:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

{

    "status":true,

    "errMsg":"",

    "member":[

        {

            "name":"李逍遥",

            "gender":"男"

        },

        {

            "name":"赵灵儿",

            "gender":"女"

        }

    ]

}

Salin selepas log masuk

php5.4 以后,json_encode增加了JSON_UNESCAPED_UNICODE ,JSON_PRETTY_PRINT 等几个常量参数。使显示中文与格式化更方便。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

header(&#39;content-type:application/json;charset=utf8&#39;); 

   

$arr = array

    &#39;status&#39; => true, 

    &#39;errMsg&#39; => &#39;&#39;, 

    &#39;member&#39; =>array

        array

            &#39;name&#39; => &#39;李逍遥&#39;, 

            &#39;gender&#39; => &#39;男&#39; 

        ), 

        array

            &#39;name&#39; => &#39;赵灵儿&#39;, 

            &#39;gender&#39; => &#39;女&#39; 

        

    

); 

   

echo json_encode($arr, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);

Salin selepas log masuk

<br/>输出:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

{

    "status": true,

    "errMsg": "",

    "member": [

        {

            "name": "李逍遥",

            "gender": "男"

        },

        {

            "name": "赵灵儿",

            "gender": "女"

        }

    ]

}

Salin selepas log masuk

<br/>JSON常量参数说明:

以下常量表示了 json_last_error() 所返回的错误类型。

1

2

3

4

5

6

7

8

9

10

11

12

JSON_ERROR_NONE (integer)

没有错误发生。自 PHP 5.3.0 起生效。

JSON_ERROR_DEPTH (integer)

到达了最大堆栈深度。自 PHP 5.3.0 起生效。

JSON_ERROR_STATE_MISMATCH (integer)

出现了下溢(underflow)或者模式不匹配。自 PHP 5.3.0 起生效。

JSON_ERROR_CTRL_CHAR (integer)

控制字符错误,可能是编码不对。自 PHP 5.3.0 起生效。

JSON_ERROR_SYNTAX (integer)

语法错误。 自 PHP 5.3.0 起生效。

JSON_ERROR_UTF8 (integer)

异常的 UTF-8 字符,也许是因为不正确的编码。 此常量自 PHP 5.3.1 起生效。

Salin selepas log masuk

<br/>下面的常量可以和 json_encode() 的 form 选项结合使用。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

JSON_HEX_TAG (integer)

所有的 < 和 > 转换成 \u003C 和 \u003E。 自 PHP 5.3.0 起生效。

JSON_HEX_AMP (integer)

所有的 & 转换成 \u0026。 自 PHP 5.3.0 起生效。

JSON_HEX_APOS (integer)

所有的 &#39; 转换成 \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 起生效。

Salin selepas log masuk

本文讲解了php JSON数据格式化的方法,更多相关内容请关注php中文网。

相关推荐:

关于php session 读写锁的相关内容<br/>

利用php 来求水仙花数的优化<br/>

如何通过php来验证身份证号码<br/>

1

<br/>

Salin selepas log masuk

Atas ialah kandungan terperinci 关于php JSON数据格式化的方法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan