zoukankan      html  css  js  c++  java
  • 格式化JSON数据

    function formatJson(json, options) {
        var reg = null,
            formatted = '',
            pad = 0,
            PADDING = '    ';
        options = options || {};
        options.newlineAfterColonIfBeforeBraceOrBracket = (options.newlineAfterColonIfBeforeBraceOrBracket === true) ? true : false;
        options.spaceAfterColon = (options.spaceAfterColon === false) ? false : true;
        if (typeof json !== 'string') {
            json = JSON.stringify(json);
        } else {
            json = JSON.parse(json);
            json = JSON.stringify(json);
        }
        reg = /([{}])/g;
        json = json.replace(reg, '
    $1
    ');
        reg = /([[]])/g;
        json = json.replace(reg, '
    $1
    ');
        reg = /(\,)/g;
        json = json.replace(reg, '$1
    ');
        reg = /(
    
    )/g;
        json = json.replace(reg, '
    ');
        reg = /
    \,/g;
        json = json.replace(reg, ',');
        if (!options.newlineAfterColonIfBeforeBraceOrBracket) {
            reg = /:
    {/g;
            json = json.replace(reg, ':{');
            reg = /:
    [/g;
            json = json.replace(reg, ':[');
        }
        if (options.spaceAfterColon) {
            reg = /:/g;
            json = json.replace(reg, ':');
        }
        (json.split('
    ')).forEach(function(node, index) {
            var i = 0,
                indent = 0,
                padding = '';
    
            if (node.match(/{$/) || node.match(/[$/)) {
                indent = 1;
            } else if (node.match(/}/) || node.match(/]/)) {
                if (pad !== 0) {
                    pad -= 1;
                }
            } else {
                indent = 0;
            }
    
            for (i = 0; i < pad; i++) {
                padding += PADDING;
            }
    
            formatted += padding + node + '
    ';
            pad += indent;
        });
        return formatted;
    };

      这个方法是在网上搜索到的一段代码,是用来把后台的页面不可读的JSON数据拼装成页面可读的JSON格式。这个方法在实际项目中可能用处不是很大,之前我使用到的场景是在做前后台对接时使用到的,因为开发的时候前端和后端是两个开发团队。所以接口测试和对接是时分有必要的,在这个时候这个把页面不可读的JSON数据转成可读的JSON就很有必要了。下面是前后端接口测试页面的具体实现。

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>接口测试</title>
        <link rel="stylesheet" href="http://www.fangxiangxiaopangpang.cn/lib/layui/build/css/layui.css">
        <style lang="">
            body {
                background-attachment: fixed;
                background-image: url('http://www.fangxiangxiaopangpang.cn/lib/images/pic01.jpg');
                background-position: center bottom;
                background-size: 100% auto;
            }
            
            .login {
                position: fixed;
                top: 50%;
                left: 50%;
                background-color: rgba(0, 0, 0, 0.4);
                width: 700px;
                transform:translate(-50%,-50%);
                -ms-transform:translate(-50%,-50%);
                -moz-transform:translate(-50%,-50%); 
                -webkit-transform:translate(-50%,-50%);
                -o-transform:translate(-50%,-50%);
                border-radius: 10px;
                text-align: center;
            }
            
            .login h1 {
                font-size: 30px;
                line-height: 40px;
                margin-top: 30px;
                color: #fff;
                padding-left: 22px;
            }
            
            .login .layui-form-item {
                /* display: inline-block; */
                margin: 20px ;
            }
            
            .login .layui-form-pane .layui-form-label {
                width: 110px;
                padding: 8px 15px;
                height: 38px;
                line-height: 20px;
                border: 1px solid #e6e6e6;
                border-radius: 2px 0 0 2px;
                text-align: center;
                background-color: #FBFBFB;
                overflow: hidden;
                white-space: nowrap;
                text-overflow: ellipsis;
                -webkit-box-sizing: border-box!important;
                -moz-box-sizing: border-box!important;
                box-sizing: border-box!important;
            }
            
            .content{
                display:none;
            }
    
            pre{
                text-align:left;
                max-height:300px;
                overflow:auto;
            }
            .fileinput{
                line-height: 40px;
                margin-left: 50px;
                color: white;
            }
            .filename{
                display: none;
            }
        </style>
    </head>
    
    <body>
        <div class="login">
            <h1>接口测试</h1>
            <form action='#' id = 'test_form'  class="layui-form">
                <div class="layui-form-item layui-form-pane">
                    <label class="layui-form-label">传输方式</label>
                    <div class="layui-input-block" style='color:white'>
                        <input type="radio" name="type" value="post" title="post" class='type'>
                        <input type="radio" name="type" value="get" title="get" checked class='type'>
                    </div>
                </div>
                <div class="layui-form-item layui-form-pane">
                    <label class="layui-form-label">接口地址</label>
                    <div class="layui-input-block">
                        <input id='address' type="text" name="address"  placeholder="请输入接口地址" autofocus class="layui-input">
                    </div>
                </div>
                <div class="layui-form-item  layui-form-pane">
                    <label class="layui-form-label">参数</label>
                    <div class="layui-input-block">
                        <input id='parmas' type="text" name="parmas" placeholder="请输入json格式的参数" class="layui-input">
                    </div>
                </div>
                <div class="layui-form-item  layui-form-pane">
                    <label class="layui-form-label">上传文件</label>
                    <div class="layui-input-block">
                        <input type="file" class='fileinput' id='fileinput'>
                    </div>
                </div>
                <div class="layui-form-item  layui-form-pane filename">
                    <label class="layui-form-label">name值</label>
                    <div class="layui-input-block">
                        <input id='filename' type="text"placeholder="请输入文件name的属性值" class="layui-input">
                    </div>
                </div>
                <div class="layui-form-item  layui-form-pane content" >
                    <pre id='backdata'>
                    </pre>
                </div>
                <div class="layui-form-item  layui-form-pane">
                    <span class="layui-btn" id='submit'>获取结果</span>
                </div>
            </form>
        </div>
        <script src='http://www.fangxiangxiaopangpang.cn/lib/jquery/jquery.min.js'></script>
        <script src='http://www.fangxiangxiaopangpang.cn/lib/layui/build/lay/dest/layui.all.js'></script>
        <script>
            var type = 'get';
            $('.layui-form-radio').on("click",function(){
                type = $(this).prev('input').val();
            });
            $('#fileinput').on('change',function(){
                $('.filename').show();
            })
            $('#submit').on("click",function(){
                if(!!$("#fileinput")[0].files[0]){
                    if($('#filename').val()==''){
                        layer.msg('请输入文件的name值');
                        return false;
                    }
                    var formdata = new FormData();
                    formdata.append($("#filename").val(), $("#fileinput")[0].files[0]);
                    if($('#parmas').val().trim() != ''){
                        try{
                            var msg = JSON.parse($('#parmas').val().trim());
                        }catch(e){
                            layer.msg('请输入标准的JSON格式数据,例如{"a":"1","b":"2"}');
                            return false;
                        }
                        if(msg){
                            for(var key in msg){
                                formdata.append(key,msg[key]);
                            }
                        }
                    }
                    if($('#address').val()==''){
                        layer.msg('请输入接口地址');
                        return false;
                    }
                    var url = $('#address').val();
                    if(url.indexOf('http://')==-1){
                        url = 'http://'+url;
                    }
                    $.ajax({
                        type : type,
                        url : url,
                        data: formdata,
                        cache: false,
                        processData: false,
                        contentType: false,
                        success:function(data){
                            console.log(data);
                            $(".content").show();
                            $('#backdata').html(formatJson(data));
                        },
                        error:function(data){
                            layer.msg('获取数据失败');
                        }
                    });
                }else{
                    if($('#address').val()==''){
                        layer.msg('请输入接口地址');
                    return false;
                    }
                    var data = {};
                    if($('#parmas').val().trim() != ''){
                        try{
                            var msg = JSON.parse($('#parmas').val().trim());
                        }catch(e){
                            layer.msg('请输入标准的JSON格式数据,例如{"a":"1","b":"2"}');
                            return false;
                        }
                        if(msg){
                            for(var key in msg){
                                data[key] = msg[key];
                            }
                        }
                    }
                    var url = $('#address').val();
                    if(url.indexOf('http://')==-1){
                        url = 'http://'+url;
                    }
                    $.ajax({
                        type : type,
                        url : url,
                        data: data,
                        success:function(data){
                            // console.log(data);
                            $(".content").show();
                            $('#backdata').html(formatJson(data));
                        },
                        error:function(data){
                            layer.msg('获取数据失败');
                        }
                    });
                }
                return false;
            });
        function formatJson(json, options) {
            var reg = null,
                formatted = '',
                pad = 0,
                PADDING = '    ';
            options = options || {};
            options.newlineAfterColonIfBeforeBraceOrBracket = (options.newlineAfterColonIfBeforeBraceOrBracket === true) ? true : false;
            options.spaceAfterColon = (options.spaceAfterColon === false) ? false : true;
            if (typeof json !== 'string') {
                json = JSON.stringify(json);
            } else {
                json = JSON.parse(json);
                json = JSON.stringify(json);
            }
            reg = /([{}])/g;
            json = json.replace(reg, '
    $1
    ');
            reg = /([[]])/g;
            json = json.replace(reg, '
    $1
    ');
            reg = /(\,)/g;
            json = json.replace(reg, '$1
    ');
            reg = /(
    
    )/g;
            json = json.replace(reg, '
    ');
            reg = /
    \,/g;
            json = json.replace(reg, ',');
            if (!options.newlineAfterColonIfBeforeBraceOrBracket) {
                reg = /:
    {/g;
                json = json.replace(reg, ':{');
                reg = /:
    [/g;
                json = json.replace(reg, ':[');
            }
            if (options.spaceAfterColon) {
                reg = /:/g;
                json = json.replace(reg, ':');
            }
            (json.split('
    ')).forEach(function(node, index) {
                var i = 0,
                    indent = 0,
                    padding = '';
                if (node.match(/{$/) || node.match(/[$/)) {
                    indent = 1;
                } else if (node.match(/}/) || node.match(/]/)) {
                    if (pad !== 0) {
                        pad -= 1;
                    }
                } else {
                    indent = 0;
                }
      
                for (i = 0; i < pad; i++) {
                    padding += PADDING;
                }
        
                formatted += padding + node + '
    ';
                pad += indent;
            });
            return formatted;
        };
    </script> 
    </body> 
    </html>
  • 相关阅读:
    C#等同于正则表达式的写法
    操作XML
    对比工具集合
    IIS 部署的网站无法启动
    jdk_1.8 下载之后的配置
    sql server 2008认识 DENSE_RANK
    c# 二分查找算法
    c# 使用栈实现有效的括号
    sql server 自定义标量函数
    虚拟机cenos 重置密码
  • 原文地址:https://www.cnblogs.com/wqc5730/p/8464439.html
Copyright © 2011-2022 走看看