// ==UserScript== // @name JsonView格式化 // @namespace https://greasyfork.org/zh-CN/scripts/27421-jsonview%E6%A0%BC%E5%BC%8F%E5%8C%96 // @version 0.0.5 // @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 // @downloadURL https://update.greasyfork.icu/scripts/27421/JsonView%E6%A0%BC%E5%BC%8F%E5%8C%96.user.js // @updateURL https://update.greasyfork.icu/scripts/27421/JsonView%E6%A0%BC%E5%BC%8F%E5%8C%96.meta.js // ==/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 '' + htmlEncode(value) + ''; } // 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 += '' + value + ''; } 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 = '[