php JSON数据格式化方法

php JSON数据格式化方法

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

php 的json_encode它可以转换为一个数组json格字符串类型。字符串不是缩进。中国将被转换unicode编码,例如\u975a\u4ed4。阅读更多困难。今天,这一方法json_encode美化处理。

使人能方便阅读内容。

1. 使用 json_encode 输出

<?

phpheader('content-type:application/json;charset=utf8');$arr = array( 'status' => true, 'errMsg' => '', 'member' =>array( array( 'name' => '李逍遥', 'gender' => '男' ), array( 'name' => '赵灵儿', 'gender' => '女' ) ));echo json_encode($arr);?

>

输出:

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

能够看出,这样的格式人阅读非常困难。

2. 使用 jsonFormat 输出

<?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);

?>

输出:

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

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

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);


输出:

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


JSON常量參数说明:

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

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 起生效。


以下的常量能够和 json_encode() 的 form 选项结合使用。

JSON_HEX_TAG (integer)
全部的 < 和 > 转换成 \u003C 和 \u003E。 自 PHP 5.3.0 起生效。

JSON_HEX_AMP (integer)
全部的 & 转换成 \u0026。 自 PHP 5.3.0 起生效。

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.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 从生效。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117811.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月30日 下午10:00
下一篇 2021年12月30日 下午10:00


相关推荐

  • 宿主机和虚拟机的网络_vmware独享宿主机网卡

    宿主机和虚拟机的网络_vmware独享宿主机网卡问题描述:宿主机为win10家庭版,虚拟机为Centos7,上午还可以正常的进行互通,中间应该是弹出来一个外设的接入通知,其他的没有什么明显的操作,下午就不能互相访问了,原因不明。解决方法:首先检查虚拟机的网络配置,分为如下几步:1、编辑–>虚拟机网络编辑器,选择桥接模式,同时选择要桥接的网络:这个网路需要和宿主机中的网络保持一致,如果宿主机中存在多个网络连接,比如无线连接和有线连接,那就根据实际需要,看虚拟机需要连接到哪个网络中,就对应选择。选择完之后,确

    2022年8月21日
    7
  • onclick与addEventListener区别

    onclick与addEventListener区别这次做项目遇到了这个问题,本来习惯性的每次都写的是addEventListener绑定click事件。但是当用addEventListener绑定了多次click事件的时候,引发了我的思考,这两者有区别吗?具体的事件分析可查看另一篇文章结论:1.onclick事件在同一时间只能指向唯一对象2.addEventListener给一个事件注册多个listener3.addEventLi…

    2022年7月12日
    25
  • sqlcipher加密原理_sqlserver数据库加密

    sqlcipher加密原理_sqlserver数据库加密使用 sqlcipher.exe可以在输入密码后,查看加密数据库的内容。但是要编码查询数据库的内容,还要另寻方法。(相关的工具和库在我的百度网盘中)使用sqlcipherwindow

    2022年8月5日
    8
  • JS的基本数据类型有哪些?

    JS的基本数据类型有哪些?1 js 的数据类型有哪些 值类型 基本类型 字符串 String 数字 Number 布尔 Boolean 对空 Null 未定义 Undefined Symbol number string boolean null undefined symbol 以及未来 ES10 新增的 BigInt 任意精度整数 七类 引用数据类型 对象 Object 数组 Array 函数 Function 注 Symbol 是 ES6 引入了一种新的原始数据类型 表示独一无二的值

    2026年3月19日
    2
  • JFlow与CCBPM的对比

    JFlow与CCBPM的对比前言为了更好的说明 activiti 与 jflow 的两款工作流引擎的特点与区别 我们按照如下几个方面做一次全面的 客观的对比 首先 activiti 是国外的一款开源的工作流程引擎 在国际上影响比较深远与广泛 解决了 BPM 领域的很多问题 值得我们赞赏 他的 boss 好像是 jbpm 的前身 JFlow 是济南驰骋公司开放的一款工作流程引擎 JFlow 的前身是 CCFl

    2026年3月18日
    2
  • 变脸不变质的桥梁模式(Bridge Pattern)

    变脸不变质的桥梁模式(Bridge Pattern)

    2021年12月5日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号