国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > 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字符串是不是美觀了很多呢,超級實用吧,這么好的東東,當然不能獨享,這里推薦給小伙伴們。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
亚洲天堂视频在线观看免费| 欧美aaa一级片| 中文字幕一区免费| www黄在线观看| 黄色一级片视频| 1区2区3区在线| 国产精品入口麻豆免费观看| 精品51国产黑色丝袜高跟鞋| www.亚洲视频| 国产视频xxx| 日本片在线看| 午夜视频在线| 色悠久久久久综合网小说| 国产美女被遭强高潮免费网站| 国产一级黄色电影| 久久精品国产亚洲a∨麻豆| 国产视频2区| 人人九九精品| 国产无遮挡在线视频免费观看| 在线一区二区三区精品| 国产女王在线**视频| 久久久久久久久亚洲精品| 国产福利一区二区在线精品| 久色视频在线观看| 伊人影院在线观看| 国产日本韩国在线播放| 国产精品偷乱一区二区三区| 在线观看的av网站| 国产一级片麻豆| 国产美女自拍视频| 成年黄网站在线观看免费| 色悠久久久久综合网小说| 国产福利在线播放麻豆| 噜噜噜噜噜在线视频| 精品街拍一区二区| 91亚洲天堂| 国产福利热线视频| 国产午夜在线观看| 中文字幕网在线| 国产精品一区二三区| 国产中文字幕在线| 蜜桃av网站| 黄网址在线播放免费| 免费午夜一级| 天堂资源最新在线| 国产婷婷视频在线| 91久久精品国产性色| 精品欧美不卡一区二区在线观看 | 麻豆网站在线| 亚洲视频在线观看不卡| 中文字幕av高清| 精品国产高清自在线一区二区三区| 国产视频一二三区| 国产高清在线看| 在线色视频网| 久久久久久久久久久久久91| 国产麻豆视频网站| 国产精品178页| 日韩欧美中文字幕不卡| 九九热视频免费在线观看| 国产一卡二卡3卡4卡四卡在线| 97福利电影| 中文视频在线| 全网国产福利在线播放| 国产剧情在线一区| 精品女厕厕露p撒尿| 青娱乐在线视频观看| 国产精品xxx电影| 亚洲免费网站在线观看| 福利在线国产| 亚洲视频手机在线观看| 国产小黄视频| 九色在线网站| 亚洲视频日韩| 中文字幕日本在线观看| 亚洲欧美精选| 国产无遮挡在线视频免费观看| 精品一区二区三区高清免费不卡| 欧美婷婷久久五月精品三区| 国产黄色一级电影| 国产在线观看91| 四虎一区二区三区| 精品网站www| 国产三级自拍| 国产精品亚洲色图| 免费精品国产自产拍观看| 91在线高清| 中文字幕高清av| 国产在线一二| 狠狠色综合久久婷婷| 欧美色欧美亚洲另类二区精品| 国产精品186在线观看在线播放| 亚洲综合在线不卡| 在线观看精品视频一区二区三区 | 女人色在线免费视频| 中文av在线播放| 国产盗摄精品一区二区酒店| 午夜伦全在线观看| 国产乱妇乱子在线播视频播放网站| 人成在线免费视频| 青青草免费观看免费视频在线| 2018中文字幕在线观看| 国产区视频在线播放| 久久久久久77777| 快射av在线播放一区| 国产自产视频| 国产一区精品| 国产69久久| 国产精品美女视频免费观看软件 | 国产专区在线| 国产精选一区二区三区不卡催乳| 九九视频在线播放| 天天操人人爽| 国产精品秘入口| 中文资源在线网| 伊人久久青青草| 青青草中文字幕| 女子免费在线观看视频www| 免费久久网站| 尤物视频在线看| 777电影在线观看| 四虎久久影院| 国产亚洲精品拍拍拍拍拍| 国产www网站| 碰草在线视频| 国产亚洲精品久久久网站好莱| 国产一二区视频| 精品国产一区二区三区四区阿崩 | 亚洲电影先锋| 丁香婷婷在线| 91xx在线观看| 福利视频在线导航| 精品极品三级久久久久| 黄色片大全在线观看| 精品免费视频一卡2卡三卡4卡不卡| 日本精品一区二区三区在线播放| 中文字幕第一页av| 九九热视频在线| av免费在线播放| 天堂在线免费观看| 在线观看午夜av| 国产日韩网站| 国产你懂的在线观看| 亚洲视频在线网| 国产精品视频一区麻豆| 久久久久国产精品嫩草影院| 在线视频观看国产| 国产福利片在线| 国产日韩网站| 国产美女av| 免费看黄视频网站| 日本动漫理论片在线观看网站| 中文av在线播放| 97国产在线| 国产youjizz在线| 99视频资源网| 国产在线一区二区视频| 美女网站在线观看| 欧美性猛交xxxx免费看久久| 亚洲天堂电影在线观看| 精品国产高清自在线一区二区三区| 国产极品美女到高潮| 国产精品久久麻豆| 国产视频二区在线观看| 国产精品久久久久久久久鸭 | 午夜在线小视频| 国产卡一卡二卡三| 国产亚洲精品久久久久久移动网络| 成人亚洲一区二区三区| 欧美96在线| 免费中文字幕| 国产69久久| 国产欧美一区二区三区小说| 国产二区视频| 伊人影院在线播放| 免费a在线看| 国产一二三四| 亚洲男人的天堂成人| 另类专区欧美| 国产一级大片| av网站在线播放| 国产女人在线观看| 国产黄在线看| 人成在线免费视频| 天堂在线一二区| 在线观看av的网站| 日本中文字幕高清视频| 精品国产一区二区三区四区阿崩| 亚洲第一成人在线视频| 国内自拍视频在线观看| 国产精品入口麻豆免费观看| 亚洲一区免费在线| 国产婷婷视频在线| 免费99热在线观看| 精品美女视频在线观看免费软件| 黄色在线视频观看网站| 在线观看免费高清完整| 国产精品视频福利一区二区| www.夜夜操.com| 国产网站在线免费观看|