在进行接口调试或接口说明时,常常需要把接口返回的JSON数据以一种友好、易读的方式进行展现。
下面介绍一种在网页里格式化输出(打印)JSON字符串的简单方式。
原始字符串
原始字符串需要符合JSON要求的标准格式,可以包含中文,如:
原始字符串,JSON格式
$origin_str = '{"code":200,"data":[{"color":"red","name":"红色","rgb":"ff0000"}, {"color":"green","name":"绿色","rgb":"00ff00"},{"color":"blue","name":"蓝色","rgb":"0000ff"}]}';
对原始字符串重新进行编解码
分别使用 json_decode() 和 json_encode() 方法对原始字符串进行一次解码和编码操作,重新生成JSON字符串。
表面上看,重新生成的字符串和原始字符串没有什么不同,但如果跳过直接进行下一步,无法得到最终的格式化输出效果。
对原始字符串进行解码,转换为PHP对象或数组
$json_obj = json_decode($origin_str);
对PHP对象或数组重新进行JSON编码,生成新的字符串
默认情况下,字符串中的中文会进行Unicode编码
$json_str = json_encode($json_obj);
echo $json_str;
此时的页面输出效果:
{"code":200,"data":[{"color":"red","name":"红色","rgb":"ff0000"},{"color":"green","name":"绿色","rgb":"00ff00"},{"color":"blue","name":"蓝色","rgb":"0000ff"}]}
````
##格式化输出有两个要点:
对 json_encode() 增加 JSON_UNESCAPED_UNICODE 和 JSON_PRETTY_PRINT 两个配置参数
把打印内容放在 <pre> 标签中
最终代码如下:
##原始字符串,JSON格式
$origin_str = '{"code":200,"data":[{"color":"red","name":"红色","rgb":"ff0000"},{"color":"green","name":"绿色","rgb":"00ff00"},{"color":"blue","name":"蓝色","rgb":"0000ff"}]}';
对原始字符串进行解码,转换为PHP对象或数组
$json_obj = json_decode($origin_str);
对PHP对象或数组重新进行JSON编码,生成新的字符串
默认情况下,字符串中的中文会进行Unicode编码
多个配置参数之间,用竖线分隔
$json_str = json_encode($json_obj, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
结果
{
"code": 200,
"data": [{
"color": "red",
"name": "红色",
"rgb": "ff0000"
}, {
"color": "green",
"name": "绿色",
"rgb": "00ff00"
}, {
"color": "blue",
"name": "蓝色",
"rgb": "0000ff"
}]
}
Comments | NOTHING