亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

使用正則表達式的格式化與高亮顯示json字符串

2019-11-20 13:50:16
字體:
來源:轉載
供稿:網友

json字符串很有用,有時候一些后臺接口返回的信息是字符串格式的,可讀性很差,這個時候要是有個可以格式化并高亮顯示json串的方法那就好多了,下面看看一個正則表達式完成的json字符串的格式化與高亮顯示

首先是對輸入進行轉換,如果是對象則轉化為規范的json字符串,不是對象時,先將字符串轉化為對象(防止不規范的字符串),然后再次轉化為json串。其中json為輸入。

復制代碼 代碼如下:

if (typeof json !== 'string') {
    json = JSON.stringify(json);
} else {
    json = JSON.parse(json);
    json = JSON.stringify(json);
}

等規范完數據之后對字符串進行標記,為了后面的切分、重新組合

這里有幾個地方要添加標記,包括大括號、小括號的前后和逗號的后面都要添加標記,我這里使用的是換行/r/n(這樣在命令行下測試時效果會比較好看)。

復制代碼 代碼如下:

// 在大括號前后添加換行
reg = /([/{/}])/g;
json = json.replace(reg, '/r/n$1/r/n');
// 中括號前后添加換行
reg = /([/[/]])/g;
json = json.replace(reg, '/r/n$1/r/n');
// 逗號后面添加換行
reg = /(/,)/g;
json = json.replace(reg, '$1/r/n');

添加完成標記之后就要做一些優化處理,去掉多余的換行、去掉逗號前面的換行,這樣做是為了在切分是免得出現空串浪費一次循環處理,最后在冒號后面添加空格,看起來更漂亮。

復制代碼 代碼如下:

// 去除多余的換行
reg = /(/r/n/r/n)/g;
json = json.replace(reg, '/r/n');
// 逗號前面的換行去掉
reg = //r/n/,/g;
json = json.replace(reg, ',');
//冒號前面縮進
reg = //:/g;
json = json.replace(reg, ': ');

接下來就是對這個初步處理過的串進行進一步處理了,我會在function(index, node) {}函數中添加邏輯,對每一個切分單元進行處理,包括縮進和美化格式。

復制代碼 代碼如下:

$.each(json.split('/r/n'), function(index, node) {});

首先說下縮進,縮進的方法很簡單,遇到{、[符號時縮進增加1,遇到}、]符號時縮進減少1,否則縮進量不變。

復制代碼 代碼如下:

//這里遇到{、[時縮進等級加1,遇到}、]時縮進等級減1,沒遇到時縮進等級不變
if (node.match(//{$/) || node.match(//[$/)) {
    indent = 1;
} else if (node.match(//}/) || node.match(//]/)) {
    if (pad !== 0) {
        pad -= 1;
    }
} else {
    indent = 0;
}

完成縮進后就該美化高亮顯示代碼了,這里要用到幾個css規則,下面可以看到,對切分單元進行高亮顯示的時候這里用正則進行判斷,如果匹配到大括號標記為對象class、中括號標記為數組class、屬性名稱、屬性值,一次對這些進行css規則添加,添加完成之后拼接起來就可以了。

復制代碼 代碼如下:

.ObjectBrace{color:#00AA00;font-weight:bold;}
.ArrayBrace{color:#0033FF;font-weight:bold;}
.PropertyName{color:#CC0000;font-weight:bold;}
.String{color:#007777;}
.Number{color:#AA00AA;}
.Comma{color:#000000;font-weight:bold;}

復制代碼 代碼如下:

//添加代碼高亮
node = node.replace(/([/{/}])/g,"<span class='ObjectBrace'>$1</span>");
node = node.replace(/([/[/]])/g,"<span class='ArrayBrace'>$1</span>");
node = node.replace(/(/".*/")(/:)(.*)(/,)?/g,"<span class='PropertyName'>$1</span>$2$3$4");
node = node.replace(//"([^"]*)/"(/,)?$/g,"<span class='String'>/"$1/"</span><span class='Comma'>$2</span>");
node = node.replace(/(-?/d+)(/,)?$/g,"<span class='Number'>$1</span><span class='Comma'>$2</span>");

最后我們看看完整的方法代碼(這里我使用了jquery類庫),以及測試地址:

要對jsonstr進行美化,這樣就可以了APP.format(jsonstr),直接輸出至<pre></pre>標簽中就可以看到效果,

下面是一個測試地址,http://iforever.sinaapp.com/ 可以進去試一下,看看完整的源代碼

復制代碼 代碼如下:

<script>
    var APP=function(){
        var format=function(json){
            var reg=null,
                result='';
                pad=0,
                PADDING='    ';
            if (typeof json !== 'string') {
                json = JSON.stringify(json);
            } else {
                json = JSON.parse(json);
                json = JSON.stringify(json);
            }
            // 在大括號前后添加換行
            reg = /([/{/}])/g;
            json = json.replace(reg, '/r/n$1/r/n');
            // 中括號前后添加換行
            reg = /([/[/]])/g;
            json = json.replace(reg, '/r/n$1/r/n');
            // 逗號后面添加換行
            reg = /(/,)/g;
            json = json.replace(reg, '$1/r/n');
            // 去除多余的換行
            reg = /(/r/n/r/n)/g;
            json = json.replace(reg, '/r/n');
            // 逗號前面的換行去掉
            reg = //r/n/,/g;
            json = json.replace(reg, ',');
            //冒號前面縮進
            reg = //:/g;
            json = json.replace(reg, ': ');
            //對json按照換行進行切分然后處理每一個小塊
            $.each(json.split('/r/n'), function(index, node) {
                var i = 0,
                    indent = 0,
                    padding = '';
                //這里遇到{、[時縮進等級加1,遇到}、]時縮進等級減1,沒遇到時縮進等級不變
                if (node.match(//{$/) || node.match(//[$/)) {
                    indent = 1;
                } else if (node.match(//}/) || node.match(//]/)) {
                    if (pad !== 0) {
                        pad -= 1;
                    }
                } else {
                    indent = 0;
                }
                   //padding保存實際的縮進
                for (i = 0; i < pad; i++) {
                    padding += PADDING;
                }
                //添加代碼高亮
                node = node.replace(/([/{/}])/g,"<span class='ObjectBrace'>$1</span>");
                node = node.replace(/([/[/]])/g,"<span class='ArrayBrace'>$1</span>");
                node = node.replace(/(/".*/")(/:)(.*)(/,)?/g,"<span class='PropertyName'>$1</span>$2$3$4");
                node = node.replace(//"([^"]*)/"(/,)?$/g,"<span class='String'>/"$1/"</span><span class='Comma'>$2</span>");
                node = node.replace(/(-?/d+)(/,)?$/g,"<span class='Number'>$1</span><span class='Comma'>$2</span>");
                result += padding + node + '<br>';
                pad += indent;
            });
            return result;
        };
        return {
            "format":format,
        };
    }();
</script>

怎么樣,json字符串是不是美觀了很多呢,超級實用吧,這么好的東東,當然不能獨享,這里推薦給小伙伴們。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久一区二区| 亚洲一区美女视频在线观看免费| 992tv在线成人免费观看| 日韩美女激情视频| 久久久久久久久国产精品| 精品国产一区二区三区久久狼黑人| 亚洲精品成人久久| 欧美亚洲国产精品| 国产成人91久久精品| 亚洲国产成人久久综合一区| 成人激情电影一区二区| 久久免费视频网站| 亚洲国产成人久久综合| 欧美日韩福利在线观看| 国产精品久久久久久久av电影| 97人人做人人爱| 一区二区三区天堂av| 久久久久久久久久久久久久久久久久av| 97在线日本国产| 激情av一区二区| 国产精品女主播视频| 亚洲成年人影院在线| 国产欧美日韩视频| 日韩激情视频在线| 亚洲跨种族黑人xxx| 国产精品美女久久| 亚洲毛片在线看| 91免费观看网站| 国产精品久久久91| 欧美成aaa人片在线观看蜜臀| 精品中文字幕在线2019| 国产xxx69麻豆国语对白| 日韩精品视频中文在线观看| 国产九九精品视频| 欧美视频精品一区| 国产精品丝袜视频| 国产精品美女呻吟| 欧美电影在线观看完整版| 日本a级片电影一区二区| 136fldh精品导航福利| 亚洲va国产va天堂va久久| 午夜精品一区二区三区在线视频| 久久躁狠狠躁夜夜爽| 日韩性xxxx爱| 国产精品7m视频| 亚洲国产精品yw在线观看| 欧美国产日韩中文字幕在线| 色综合久综合久久综合久鬼88| 日韩av免费在线播放| 欧洲美女免费图片一区| 视频在线一区二区| 久久久久一本一区二区青青蜜月| 国产区精品在线观看| 欧美性xxxx极品hd欧美风情| 91亚洲人电影| 91精品啪aⅴ在线观看国产| 精品福利在线视频| 久久久99免费视频| 夜夜狂射影院欧美极品| 欧美电影免费看| 亚洲欧美日韩精品久久奇米色影视| 日韩欧中文字幕| 亚洲精品97久久| 国产高清视频一区三区| www.久久久久久.com| 自拍偷拍免费精品| 91美女福利视频高清| 国产视频精品xxxx| 亚洲色图15p| 91po在线观看91精品国产性色| 亚洲精品久久久久中文字幕欢迎你| 欧美色道久久88综合亚洲精品| 在线日韩欧美视频| 8050国产精品久久久久久| 欧美俄罗斯乱妇| 亚洲老头老太hd| 欧美裸体xxxx极品少妇| 欧美专区国产专区| 亚洲影视九九影院在线观看| 国产精品无av码在线观看| 国语自产精品视频在线看一大j8| 91精品视频观看| 欧美激情在线视频二区| 777午夜精品福利在线观看| 成人精品网站在线观看| 中文字幕亚洲自拍| 亚洲欧美视频在线| 久久精品国产96久久久香蕉| 九九热r在线视频精品| 国产精品视频免费在线| 欧美成人精品xxx| 最近中文字幕mv在线一区二区三区四区| 高跟丝袜一区二区三区| 自拍偷拍亚洲一区| 中文欧美日本在线资源| 一区二区三区视频观看| 日韩在线精品一区| 亚洲欧美日韩在线高清直播| 日韩精品久久久久久福利| 亚洲一区亚洲二区| 欧美在线精品免播放器视频| 久久好看免费视频| 性色av一区二区三区在线观看| 欧美高清视频在线播放| 在线观看久久av| 亚洲国产精久久久久久| 国产日韩欧美在线看| 国产精品久久9| 欧美成人合集magnet| 日韩女优人人人人射在线视频| 欧美日韩美女视频| 亚洲成年人影院在线| 精品五月天久久| 国产精品日韩专区| 亚洲国产精品成人va在线观看| 欧美老女人xx| 久久久久久91香蕉国产| 久久999免费视频| 欧美日韩国产一区在线| 亚洲精品一区二三区不卡| 成人做爽爽免费视频| 国产精品网站入口| 羞羞色国产精品| 久久影院资源站| 日本精品免费一区二区三区| 91精品在线一区| 久操成人在线视频| 欧美一区二三区| 九九热精品视频在线播放| 久久69精品久久久久久国产越南| 国产精品久久久久久久久久免费| 一区二区三区国产视频| 欧美激情亚洲一区| 日韩黄色在线免费观看| 国产精品吊钟奶在线| 奇米4444一区二区三区| 日韩女优在线播放| 久久久久久欧美| 久久精品一本久久99精品| 欧美日韩中文字幕在线视频| 欧美性生活大片免费观看网址| 国产第一区电影| 久久艹在线视频| 国产精品一区二区久久精品| 亚洲欧美中文字幕| 久久中文字幕一区| 中文字幕欧美日韩va免费视频| 97视频免费在线看| 欧美大胆a视频| 亚洲黄色av女优在线观看| 成人福利在线视频| 色无极影院亚洲| 精品视频www| 国产午夜精品一区理论片飘花| 北条麻妃久久精品| 日韩久久精品电影| 色婷婷亚洲mv天堂mv在影片| 国产精品欧美亚洲777777| 成人黄色在线免费| 亚洲精品美女视频| 国产精品综合不卡av| 亚洲欧洲高清在线| 91久久精品日日躁夜夜躁国产| 日本韩国欧美精品大片卡二|