牛骨文教育服务平台(让学习变的简单)
博文笔记

PHP:JSON函数json_encode详解

创建时间:2017-05-11 投稿人: 浏览次数:1044

PHP:JSON函数json_encode详解

【前言】

json是一种轻量级的数据交换格式,在现在的web开发当中,简介和清晰的层次结构使得json成为理想的数据交换语言。
在php当中,就经常需要使用json_encode这个函数来对变量进行JSON编码,而在编码完成之后,需要对一些特殊字符进行相应的处理(例如/,’,”等),也会在编码中文字符的时候遇到一些问题。这篇博客就对json_encode()做一个比较详细的说明。


【json_encode简介】

json_encode — 对变量进行 JSON 编码

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

<参数>
[value]:待编码的 value ,除了resource类型之外,可以为任何数据类型。所有字符串数据的编码必须是 UTF-8。

[options]: 由以下常量组成的二进制掩码: JSON_HEX_QUOT等。
具体参见:JSON常量

[depth]: 设置最大深度。 必须大于0。

<返回值>
成功则返回 JSON 编码的 string 或者在失败时返回 FALSE


【json_encode详解】

1、特殊字符(<, >, ‘, “, &)的处理

<?php
    $a = array("<foo>", ""bar"", ""baz"", "&blong&");
    /*Normal*/
    echo json_encode($a)."<br/>";

    /*JSON_HEX_TAG:将所有的< 和 > 转换成u003C和u003E*/
    echo json_encode($a[0], JSON_HEX_TAG)."<br/>";

    /*JSON_HEX_APOS:将所有的"转换成u0027*/
    echo json_encode($a[1], JSON_HEX_APOS)."<br/>";

    /*JSON_HEX_QUOT:将所有的"转换成u0022*/
    echo json_encode($a[2], JSON_HEX_QUOT)."<br/>";

    /*JSON_HEX_AMP:将所有的&转换成u0026*/
    echo json_encode($a[3], JSON_HEX_AMP)."<br/>";
?>
输出:
["",""bar"",""baz"","&blong&"]
"u003Cfoou003E"
"u0027baru0027"
"u0022bazu0022"
"u0026blongu0026"

2、使一个非关联数组输出一个类而非数组

<?php
    /*JSON_FORCE_OBJECT:使一个非关联数组输出一个类而非数组*/
    $b = array();
    echo json_encode($b)."<br/>";
    echo json_encode($b, JSON_FORCE_OBJECT)."<br/>";

    $c = array(array(1,2,3));
    echo json_encode($c)."<br/>";
    echo json_encode($c, JSON_FORCE_OBJECT)."<br/>";

    $d = array("foo" => "bar", "baz" => "long");
    echo json_encode($d)."<br/>";
    echo json_encode($d, JSON_FORCE_OBJECT)."<br/>";
?>
输出:
[]
{}
[[1,2,3]]
{"0":{"0":1,"1":2,"2":3}}
{"foo":"bar","baz":"long"}
{"foo":"bar","baz":"long"}

3、将数字字符串编码成数字

<?php
    /*JOSN_NUMERIC_CHECK:将所有的数字字符串编码成数字*/
    $e = array("12345", "789");
    echo json_encode($e)."<br/>";
    echo json_encode($e, JSON_NUMERIC_CHECK);
?>
输出:
["12345","789"]
[12345,789]

4、特殊字符’/’的处理(不要编码’/’)

<?php
    /*JSON_UNESCAPED_SLASHES:不要编码/*/
    $f = array("/abcd");
    echo json_encode($f)."<br/>";
    echo json_encode($f, JSON_UNESCAPED_SLASHES)."<br/>";
?>
输出:
["/abcd"]
["/abcd"]

5、确保浮点数被编码为浮点数

<?php
    /*JSON_PRESERVE_ZERO_FRACTION:确保浮点数被编码为浮点数*/
    echo json_encode(12.0)."<br/>";
    echo json_encode(12.0, JSON_PRESERVE_ZERO_FRACTION)."<br/>";
?>
输出:
12
12.0

6、中文字符编码(以字面编码多字节Unicode字符)

<?php
    $g = array("你好!", "世界");
    /*JSON_UNESCAPED_UNICODE:以字面编码多字节Unicode字符(默认是编程成uXXXX)*/
    echo json_encode($g)."<br/>";
    echo json_encode($g, JSON_UNESCAPED_UNICODE)."<br/>";
?>
输出:
["u4f60u597duff01","u4e16u754c"]
["你好!","世界"]

PS:有任何疑问或者错误欢迎指正!

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。