您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
基于JSONView的JSON格式化脚本,方便查看json数据
当前为
// ==UserScript== // @name JsonView格式化 // @namespace https://gf.qytechs.cn/zh-CN/scripts/27421-jsonview%E6%A0%BC%E5%BC%8F%E5%8C%96 // @version 0.0.4 // @description 基于JSONView的JSON格式化脚本,方便查看json数据 // @author 王洋 // @match http*://*/* //@required http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js //@license The MIT License (MIT); http://opensource.org/licenses/MIT // ==/UserScript== (function() { 'use strict'; //CSS样式 var style ='body {font-family: sans-serif;}' + '.prop {font-weight: bold;}' + '.null {color: red;}' + '.bool {color: blue;}' + '.num {color: blue;}' + '.string {color: green;}' + '.collapser {position: absolute; left: -1em; cursor: pointer;}' + 'li {position: relative;}' + 'li:after {content: ",";}' + 'li:last-child:after {content: "";}' + '#error {-moz-border-radius: 8px; border: 1px solid #970000; background-color: #F7E8E8; margin: .5em; padding: .5em;}' + '.errormessage {font-family: monospace; }' + '#json {font-family: monospace; font-size: 1.1em;}' + 'ul {list-style: none; margin: 0 0 0 2em; padding: 0;}' + 'h1 {font-size: 1.2em;}' + '.callback + #json {padding-left: 1em;}' + '.callback {font-family: monospace; color: #A52A2A;}'; //JS脚本 var defaultJs = 'document.addEventListener("DOMContentLoaded", function() {' + 'function collapse(evt) {' + 'var collapser = evt.target;' + 'var target = collapser.parentNode.getElementsByClassName("collapsible");' + 'if ( ! target.length ) {return;}' + 'target = target[0];' + ' if ( target.style.display == "none" ) {' + 'var ellipsis = target.parentNode.getElementsByClassName("ellipsis")[0];' + 'target.parentNode.removeChild(ellipsis);' + 'target.style.display = "";' + '} else {' + 'target.style.display = "none";' + 'var ellipsis = document.createElement("span");' + 'ellipsis.className = "ellipsis";' + 'ellipsis.innerHTML = " … ";' + 'target.parentNode.insertBefore(ellipsis, target);' + '}' + 'collapser.innerHTML = ( collapser.innerHTML == "-" ) ? "+" : "-";' + '}' + 'function addCollapser(item) {' + 'if ( item.nodeName != "LI" ) {' + 'return;' + '}' + 'var collapser = document.createElement("div");' + 'collapser.className = "collapser";' + 'collapser.innerHTML = "-";' + 'collapser.addEventListener("click", collapse, false);' + 'item.insertBefore(collapser, item.firstChild);' + '}' + 'var items = document.getElementsByClassName("collapsible");' + 'for( var i = 0; i < items.length; i++) {' + ' addCollapser(items[i].parentNode);' + '}' + '}, false);'; function htmlEncode(t) { return t; } function decorateWithSpan(value, className) { return '<span class="' + className + '">' + htmlEncode(value) + '</span>'; } // Convert a basic JSON datatype (number, string, boolean, null, object, array) into an HTML fragment. function valueToHTML(value) { var valueType = typeof value; var output = ""; if (value == null) { output += decorateWithSpan('null', 'null'); } else if (value && value.constructor == Array) { output += arrayToHTML(value); } else if (valueType == 'object') { output += objectToHTML(value); } else if (valueType == 'number') { output += decorateWithSpan(value, 'num'); } else if (valueType == 'string') { if (/^(http|https):\/\/[^\s]+$/.test(value)) { value = htmlEncode(value); output += '<a href="' + value + '">' + value + '</a>'; } else { output += decorateWithSpan('"' + value + '"', 'string'); } } else if (valueType == 'boolean') { output += decorateWithSpan(value, 'bool'); } return output; } // Convert an array into an HTML fragment function arrayToHTML(json) { var output = '[<ul class="array collapsible">'; var hasContents = false; for (var prop in json) { hasContents = true; output += '<li>'; output += valueToHTML(json[prop]); output += '</li>'; } output += '</ul>]'; if (!hasContents) { output = "[ ]"; } return output; } // Convert a JSON object to an HTML fragment function objectToHTML(json) { var output = '{<ul class="obj collapsible">'; var hasContents = false; for (var prop in json) { hasContents = true; output += '<li>'; output += '<span class="prop">' + htmlEncode(prop) + '</span>: '; output += valueToHTML(json[prop]); output += '</li>'; } output += '</ul>}'; if (!hasContents) { output = "{ }"; } return output; } // Convert a whole JSON object into a formatted HTML document. function jsonToHTML(json, callback, uri) { var output = ''; if (callback) { output += '<div class="callback">' + callback + ' (</div>'; output += '<div id="json">'; } else { output += '<div id="json">'; } output += valueToHTML(json); output += '</div>'; if (callback) { output += '<div class="callback">)</div>'; } return toHTML(output, uri); } // Produce an error document for when parsing fails. function errorPage(error, data, uri) { var output = '<div id="error">Error parsing JSON: ' + error.message + '</div>'; output += '<h1>' + error.stack + ':</h1>'; output += '<div id="json">' + htmlEncode(data) + '</div>'; return toHTML(output, uri + ' - Error'); } // Wrap the HTML fragment in a full document. Used by jsonToHTML and errorPage. function toHTML(content, title) { return '<doctype html>' + '<html><head><title>' + title + '</title>' + '<style type="text/css">' + style + '</style>' + '<script type="text/javascript">' + defaultJs + '</script>' + '</head><body>' + content + '</body></html>'; } //格式化函数 function formateJSON() { var data = document.body.innerHTML; var uri = document.location.href; data = data.replace(/<(?:.|\s)*?>/g, ''); //Aggressively strip HTML. // Test if what remains is JSON or JSONp var json_regex = /^\s*([\[\{].*[\}\]])\s*$/; // Ghetto, but it works var jsonp_regex = /^[\s\u200B\uFEFF]*([\w$\[\]\.]+)[\s\u200B\uFEFF]*\([\s\u200B\uFEFF]*([\[{][\s\S]*[\]}])[\s\u200B\uFEFF]*\);?[\s\u200B\uFEFF]*$/; var jsonp_regex2 = /([\[\{][\s\S]*[\]\}])\)/; var is_json = json_regex.test(data); var is_jsonp = jsonp_regex.test(data); console.log("JSONView: is_json=" + is_json + " is_jsonp=" + is_jsonp); if (is_json || is_jsonp) { console.log("JSONView: sexytime!"); // Sanitize & output -- all magic from JSONView Firefox var outputDoc = ''; // text = text.match(jsonp_regex)[1]; var cleanData = '', callback = ''; var callback_results = jsonp_regex.exec(data); if (callback_results && callback_results.length == 3) { console.log("THIS IS JSONp"); callback = callback_results[1]; cleanData = callback_results[2]; } else { console.log("Vanilla JSON"); cleanData = data; } console.log(cleanData); // Covert, and catch exceptions on failure try { // var jsonObj = this.nativeJSON.decode(cleanData); var jsonObj = JSON.parse(cleanData); if (jsonObj) { outputDoc = jsonToHTML(jsonObj, callback, uri); console.log(outputDoc); } else { throw "There was no object!"; } } catch (e) { console.log(e); outputDoc = errorPage(e, data, uri); } var links = '<style type="text/css">' + style + '</style>' + '<script type="text/javascript">' + defaultJs + '</script>'; document.body.innerHTML = links + outputDoc; } } //执行格式化脚本 formateJSON(); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址