首页 > php JSON数据格式化输出方法

php JSON数据格式化输出方法

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

 

1. 使用 json_encode 输出

 1 php
 2 
 3 header('content-type:application/json;charset=utf8');
 4 
 5 $arr = array(
 6     'status' => true,
 7     'errMsg' => '',
 8     'member' =>array(
 9         array(
10             'name' => '李逍遥',
11             'gender' => '男'
12         ),
13         array(
14             'name' => '赵灵儿',
15             'gender' => '女'
16         )
17     )
18 );
19 
20 echo json_encode($arr);
21 
22 ?>

输出结果为:

{"status":true,"errMsg":"","member":[{"name":"u674eu900du9065","gender":"u7537"},{"name":"u8d75u7075u513f","gender":"u5973"}]}

 

2. 使用 jsonFormat 输出

 1 php
 2 
 3 /** Json数据格式化
 4 * @param  Mixed  $data   数据
 5 * @param  String $indent 缩进字符,默认4个空格
 6 * @return JSON
 7 */
 8 function jsonFormat($data, $indent=null){
 9 
10     // 对数组中每个元素递归进行urlencode操作,保护中文字符
11     array_walk_recursive($data, 'jsonFormatProtect');
12 
13     // json encode
14     $data = json_encode($data);
15 
16     // 将urlencode的内容进行urldecode
17     $data = urldecode($data);
18 
19     // 缩进处理
20     $ret = '';
21     $pos = 0;
22     $length = strlen($data);
23     $indent = isset($indent)? $indent : '    ';
24     $newline = "
";
25     $prevchar = '';
26     $outofquotes = true;
27 
28     for($i=0; $i<=$length; $i++){
29 
30         $char = substr($data, $i, 1);
31 
32         if($char=='"' && $prevchar!='\'){
33             $outofquotes = !$outofquotes;
34         }elseif(($char=='}' || $char==']') && $outofquotes){
35             $ret .= $newline;
36             $pos --;
37             for($j=0; $j<$pos; $j++){
38                 $ret .= $indent;
39             }
40         }
41 
42         $ret .= $char;
43         
44         if(($char==',' || $char=='{' || $char=='[') && $outofquotes){
45             $ret .= $newline;
46             if($char=='{' || $char=='['){
47                 $pos ++;
48             }
49 
50             for($j=0; $j<$pos; $j++){
51                 $ret .= $indent;
52             }
53         }
54 
55         $prevchar = $char;
56     }
57 
58     return $ret;
59 }
60 
61 /** 将数组元素进行urlencode
62 * @param String $val
63 */
64 function jsonFormatProtect(&$val){
65     if($val!==true && $val!==false && $val!==null){
66         $val = urlencode($val);
67     }
68 }
69 
70 header('content-type:application/json;charset=utf8');
71 
72 $arr = array(
73     'status' => true,
74     'errMsg' => '',
75     'member' =>array(
76         array(
77             'name' => '李逍遥',
78             'gender' => '男'
79         ),
80         array(
81             'name' => '赵灵儿',
82             'gender' => '女'
83         )
84     )
85 );
86 
87 echo jsonFormat($arr);
88 
89 ?>

输出结果为:

{"status":true,"errMsg":"","member":[{"name":"李逍遥","gender":"男"},{"name":"赵灵儿","gender":"女"}]
}

 

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

 

 1 header('content-type:application/json;charset=utf8');  
 2   
 3 $arr = array(  
 4     'status' => true,  
 5     'errMsg' => '',  
 6     'member' =>array(  
 7         array(  
 8             'name' => '李逍遥',  
 9             'gender' => '男'  
10         ),  
11         array(  
12             'name' => '赵灵儿',  
13             'gender' => '女'  
14         )  
15     )  
16 );  
17   
18 echo json_encode($arr, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);

输出结果为:

{"status": true,"errMsg": "","member": [{"name": "李逍遥","gender": "男"},{"name": "赵灵儿","gender": "女"}]
}

 

转载于:https://www.cnblogs.com/joshua317/articles/4630829.html

更多相关:

  • 虽然循环可以工作,但跟踪嵌套循环也很困难。您可以考虑调用卷积定理来更容易地执行卷积。见here。在使用numpy的fft模块,您可以计算原始图像堆栈的n维离散Fourier变换,并将其乘以大小相同的核的n维Fourier变换(文档可找到here)。因为你的2D内核是一个3x3数组,它是一个3x3xz正方形的“支柱”,你可以用0填充这个...

  • 1. 一维数组 静态 int array[100];   定义了数组array,并未对数组进行初始化静态 int array[100] = {1,2};  定义并初始化了数组array动态 int* array = new int[100];  delete []array;  分配了长度为100的数组array 动态 int* a...

  • 一.选择排序 #include //选择排序 //记录最小的那个数的索引值 //下面这个循环就是去寻找最小的那个数的index //有比k对应的值更小的 //判断是否需要交换 //k和i对应的值交换 void selectsort(int array[],int counttimes){     int k = 0...

  • 首先准备如下社交图形数据:打开spark-shell;导入相关包:import org.apache.spark._ import org.apache.spark.graphx._ import org.apache.spark.rdd.RDD创建如上graph对象:// Create an RDD for the vertice...

  • 下面是我依据网上资料的实操过程,记录以作备忘。该示例给出了https通信并处理json文件的例子。 平台:Ubuntu 16.04.3 LTS go版本:1.10 1.生成自签名的服务器端的私钥KEY和公钥证书 openssl genrsa -out server.key 2048 openssl req -new -x509 -ke...

  • hive提供了json的解析函数:get_json_object   使用方法 对于jsonArray(json数组),如person表的xjson字段有数据: [{"name":"王二狗","sex":"男","age":"25"},{"name":"李狗嗨","sex":"男","age":"47"}] 取出第一个json对象...

  • 1、判断json是否为空 jQuery.isEmptyObject(); 2、遍历json function getHsonLength(json{var jsonLength=0;for (var i in json){jsonLength++;}return jsonLength;} 转载于:https...

  • 简单示例: import request from 'superagent';//引用声明 request.post(api).withCredentials()//跨域.end((err, res) => {if (res.ok) {const json = JSON.parse(res.text);} else {console...

  • 在使用C#开发爬虫程序时,会遇到需要解析json字符串的情况。对于json字符串可以使用正则表达式的形式进行解析,更为方便的方法是使用Newtonsoft.Json来实现。 Nuget添加应用包 在工程上右键——【管理Nuget程序包】浏览找到要安装的程序包Newtonsoft.Json使用 引用using Newtonsoft...

  • 引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建(二)根据已知地图进行定位和导航(三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传我的Github。 这是第三部分,完成效果如下 图1 建图和导航 三、使用RTAB-Map进行建图和导航 1. rtab...

  • 引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建(二)根据已知地图进行定位和导航(三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传我的Github。 由于之前的虚拟机性能限制,我在这个项目中使用了新的ubantu 16.04环境,虚拟机配置 内存 8GCPU...

  • [{name:1},{name:2}].forEach((v,i,ar) => {console.log(v,i,ar)});//基础遍历[{name:1},{name:2}].map((v) => v.name);//[1,2]返回对象数组中指定字段值的一位数组(不改变原始数组)[{name:1},{name:2},{name:3}...

  • 体验内容 使用gmapping方法利用turtlebot底盘移动信息和激光雷达数据进行建图。 1. 安装一些依赖包 sudo apt-get install ros-melodic-move-base* sudo apt-get install ros-melodic-map-server* sudo apt-get insta...

  • 前言 我们知道Java/Python这种语言能够很好得 支持反射。反射机制 就是一种用户输入的字符串到对应实现方法的映射,比如http接口中 用户传入了url,我们需要调用该url对应的方法/函数对象 从而做出对应的操作。 而C++ 并没有友好得支持这样的操作,而最近工作中需要通过C++实现http接口,这个过程想要代码实现得优雅...