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

header('content-type:application/json;charset=utf8');  

$arr = array(
'status' => true,
'errMsg' => '',
'member' =>array(
array(
'name' => '张三',
'gender' => '男'
),
array(
'name' => '李四',
'gender' => '女'
)
)
); echo json_encode($arr); ?>
 输出: [javascript] view
{"status":true,"errMsg":"","member":[{"name":"\u674e\u900d\u9065","gender":"\u7537"},{"name":"\u8d75\u7075\u513f","gender":"\u5973"}]}  
可以看出,这种格式人阅读很困难。 

. 使用 jsonFormat 输出 [php] view 
<?php  

/** Json数据格式化
* @param Mixed $data 数据
* @param String $indent 缩进字符,默认4个空格
* @return JSON
*/
function jsonFormat($data, $indent=null){ // 对数组中每个元素递归进行urlencode操作,保护中文字符
array_walk_recursive($data, 'jsonFormatProtect'); // json encode
$data = json_encode($data); // 将urlencode的内容进行urldecode
$data = urldecode($data); // 缩进处理
$ret = '';
$pos = 0;
$length = strlen($data);
$indent = isset($indent)? $indent : ' ';
$newline = "\n";
$prevchar = '';
$outofquotes = true; for($i=0; $i<=$length; $i++){ $char = substr($data, $i, 1); if($char=='"' && $prevchar!='\\'){
$outofquotes = !$outofquotes;
}elseif(($char=='}' || $char==']') && $outofquotes){
$ret .= $newline;
$pos --;
for($j=0; $j<$pos; $j++){
$ret .= $indent;
}
} $ret .= $char; if(($char==',' || $char=='{' || $char=='[') && $outofquotes){
$ret .= $newline;
if($char=='{' || $char=='['){
$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('content-type:application/json;charset=utf8'); $arr = array(
'status' => true,
'errMsg' => '',
'member' =>array(
array(
'name' => '张三',
'gender' => '男'
),
array(
'name' => '李四',
'gender' => '女'
)
)
); echo jsonFormat($arr); ?>  
输出: [javascript] view plaincopy在CODE上查看代码片派生到我的代码片 
{
"status":true,
"errMsg":"",
"member":[
{
"name":"张三",
"gender":"男"
},
{
"name":"李四",
"gender":"女"
}
]
}
php5. 以后,json_encode增加了JSON_UNESCAPED_UNICODE , JSON_PRETTY_PRINT 等几个常量参数。使显示中文与格式化更方便。
[php] view
header('content-type:application/json;charset=utf8');    

$arr = array(
'status' => true,
'errMsg' => '',
'member' =>array(
array(
'name' => '张三',
'gender' => '男'
),
array(
'name' => '李四',
'gender' => '女'
)
)
); echo json_encode($arr, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);  
输出: [plain] view 
{
"status": true,
"errMsg": "",
"member": [
{
"name": "张三",
"gender": "男"
},
{
"name": "李四",
"gender": "女"
}
]
}
JSON常量参数说明: 以下常量表示了 json_last_error() 所返回的错误类型。
[plain] view
JSON_ERROR_NONE (integer)
没有错误发生。自 PHP 5.3. 起生效。 JSON_ERROR_DEPTH (integer)
到达了最大堆栈深度。自 PHP 5.3. 起生效。 JSON_ERROR_STATE_MISMATCH (integer)
出现了下溢(underflow)或者模式不匹配。自 PHP 5.3. 起生效。 JSON_ERROR_CTRL_CHAR (integer)
控制字符错误,可能是编码不对。自 PHP 5.3. 起生效。 JSON_ERROR_SYNTAX (integer)
语法错误。 自 PHP 5.3. 起生效。 JSON_ERROR_UTF8 (integer)
异常的 UTF- 字符,也许是因为不正确的编码。 此常量自 PHP 5.3. 起生效。 下面的常量可以和 json_encode() 的 form 选项结合使用。
[plain] view
JSON_HEX_TAG (integer)
所有的 < 和 > 转换成 \u003C 和 \u003E。 自 PHP 5.3. 起生效。 JSON_HEX_AMP (integer)
所有的 & 转换成 \u0026。 自 PHP 5.3. 起生效。 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. 起生效。 JSON_NUMERIC_CHECK (integer)
将所有数字字符串编码成数字(numbers)。 自 PHP 5.3. 起生效。 JSON_BIGINT_AS_STRING (integer)
将大数字编码成原始字符原来的值。 自 PHP 5.4. 起生效。 JSON_PRETTY_PRINT (integer)
用空白字符格式化返回的数据。 自 PHP 5.4. 起生效。 JSON_UNESCAPED_SLASHES (integer)
不要编码 /。 自 PHP 5.4. 起生效。 JSON_UNESCAPED_UNICODE (integer)
以字面编码多字节 Unicode 字符(默认是编码成 \uXXXX)。 自 PHP 5.4. 起生效。

PHP json数据格式化方法的更多相关文章

  1. ASP.NET提取多层嵌套json数据的方法

    本文实例讲述了ASP.NET利用第三方类库Newtonsoft.Json提取多层嵌套json数据的方法,具体例子如下. 假设需要提取的json字符串如下: {"name":&quo ...

  2. 用jquery解析JSON数据的方法以及字符串转换成json的3种方法

    用jquery解析JSON数据的方法,作为jquery异步请求的传输对象,jquery请求后返回的结果是 json对象,这里考虑的都是服务器返回JSON形式的字符串的形式,对于利用JSONObject ...

  3. js如何把字符串转换成json数据的方法

    js如何把字符串转换成json数据的方法 function strtojson(str){ var json = eval('(' + str + ')'); return json; } 方法二 f ...

  4. JQuery 获取json数据$.getJSON方法的实例代码

    这篇文章介绍了JQuery 获取json数据$.getJSON方法的实例代码,有需要的朋友可以参考一下 前台: function SelectProject() { var a = new Array ...

  5. Spring MVC 3.0 返回JSON数据的方法

    Spring MVC 3.0 返回JSON数据的方法1. 直接 PrintWriter 输出2. 使用 JSP 视图3. 使用Spring内置的支持// Spring MVC 配置<bean c ...

  6. ThinkPHP中使用ajax接收json数据的方法

    本文实例讲述了ThinkPHP中使用ajax接收json数据的方法.分享给大家供大家参考.具体分析如下: 这里通过ThinkPHP+jquery实现ajax,扩展了下,写了个查询,前台代码如下: 首先 ...

  7. 推荐一个在线json数据格式化网站

    json数据非常友好方便的处理: 推荐一个在线json数据格式化网站 http://json.parser.online.fr/

  8. 详解ASP.NET提取多层嵌套json数据的方法

    本篇文章主要介绍了ASP.NET提取多层嵌套json数据的方法,利用第三方类库Newtonsoft.Json提取多层嵌套json数据的方法,有兴趣的可以了解一下. 本文实例讲述了ASP.NET利用第三 ...

  9. java 实现JSON数据格式化

    关键在于好的算法这个代码来源于网络,算法已在注释中添加. 工具地址: 链接:https://pan.baidu.com/s/1Ns3cqi0SG3qSqatrZBrl4A 提取码:2enp 复制这段内 ...

随机推荐

  1. centos mysql 大量数据导入时1153 错误:1153 - Got a packet bigger than 'max_allowed_packet' bytes

    参考:http://stackoverflow.com/questions/93128/mysql-error-1153-got-a-packet-bigger-than-max-allowed-pa ...

  2. Android俄罗斯方块AI设计文档

    首先上源码: https://github.com/bingghost/SimpleTetris 一.概要 使用了2种AI算法: 一种是经典的Pierre Dellacherie算法 一种基于基于深度 ...

  3. 谷歌Chrome浏览器开发者工具的基础功能

    上一篇我们学习了谷歌Chrome浏览器开发者工具的基础功能,下面介绍的是Chrome开发工具中最有用的面板Sources.Sources面板几乎是最常用到的Chrome功能面板,也是解决一般问题的主要 ...

  4. 求教Sublime Text2 SublimeLinter插件安装问题

    昨天装了 SublimeLinter插件(代码语法检测),这个事插件的地址:https://github.com/Kronuz/SublimeLinter 按照作者的介绍配置了一下,发现语法检测不起作 ...

  5. 【Java】嵌套For循环性能优化案例

    参考资料:http://cgs1999.iteye.com/blog/1596671 1 案例描述 某日,在JavaEye上看到一道面试题,题目是这样的:请对以下的代码进行优化 for (int i  ...

  6. 【GoLang】GoLang for 中有多个循环变量怎么处理?

    代码示例: sum := , ; i <= && j <= ; i, j = i+, j- { t.Log("i: ", i) t.Log(" ...

  7. PHP入门笔记

    PHP是一种创建动态交互性站点的强有力的服务器端脚本语言.PHP其代码可以直接嵌入HYML代码.PHP语法非常类似于Perl和C,常常搭配Apache一起使用. 1.PHP是指超文本预处理器(Hype ...

  8. SQL Server 流程控制

    流程控制语句: BEGIN ... END WAITFOR GOTO WHILE IF ... ELSE BREAK RETURN CONTINURE   1.BEGIN ... END BEGIN ...

  9. 【转】.so兼容32位和64位

    本文转自:http://blog.csdn.net/fwt336/article/details/51700300 安卓的兼容性是一个很令人头疼的问题,这几天又遇到了,还好还是解决了. 我遇到的问题是 ...

  10. WPF页面 全球化和本地化

    传统的 新建.resx类型的文件中,然后利用ResourceManager来得到相应资源并根据当地的CultureInfo来给界面文本赋值. WPF 新建一个文件夹 Language 新建2个资源字典 ...