从页面或者后台的角度格式化json或xml报文
来源:互联网 发布:vps监控软件 windows 编辑:程序博客网 时间:2024/06/05 18:54
*页面格式化json
<!DOCTYPE html><html><head> <title>测试页</title> <style> pre {outline: 1px solid #ccc; padding: 5px; margin: 5px; word-wrap: break-word; white-space: pre-wrap; width: 100%; height: 100%; overflow: auto;} <!-- pre标签要设置长度和高度才能设置滚动条,pre-wrap为自动换行 --> .string { color: green; } .number { color: darkorange; } .boolean { color: blue; } .null { color: magenta; } .key { color: red; } </style></head><body><div> <pre id="jsonStr1" style="width:50;"></pre> <pre id="jsonStr2"></pre> <pre id="jsonStr3"></pre></div><script type="text/javascript"> var songResJson={ "requestHead":{ "sign":"GM2EUi+hJV6VNi6Hss+eWxHA9YkAZ9FEREKKDIBLYe4XWmqsdc8qQj5La00xno+jZg+DCFoejnZovLiUa3Xs05MHaznTrs4gpLFFl77KZSA9Qdrl3FAMxv2f2lnY1pNVOwSbDENjgyk=", "tradeDate":"2017-07-24 10:51:42", "tradeType":"car", "openID":"dXiao", "tradeNo":"5506A722FD41B852E0530100007F6802AAAA", "token":"dianxiao" }, "toMobile":"18326113693", "xmsContent":"您好!天安电话车险为您报价:交强险保费855元,商业险保费2583.91元,总计3438.91元,含 车损险(保额9.18万)1160.61元, 三者险(保额50万)1061.04元, 无法找到第三方特约险(保额0万)29.01元,不计免赔共333.25元。另代缴车船税300元。最终价格会受您既往理赔情况等因素影响,请以出单为准。如需详询请致电95505转3,尹慧慧(工号792594)为您服务", "smsChannel":"04" }; function syntaxHighlight(json) { if (typeof json != 'string') { json = JSON.stringify(json, undefined, 2); } json = json.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'); return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function(match) { var cls = 'number'; if (/^"/.test(match)) { if (/:$/.test(match)) { cls = 'key'; } else { cls = 'string'; } } else if (/true|false/.test(match)) { cls = 'boolean'; } else if (/null/.test(match)) { cls = 'null'; } return '<span class="' + cls + '">' + match + '</span>'; }); }; document.getElementById("jsonStr1").innerHTML=JSON.stringify(songResJson,null,2); document.getElementById("jsonStr2").innerHTML=JSON.stringify(songResJson,null,4); document.getElementById("jsonStr3").innerHTML=syntaxHighlight(songResJson);</script></body><html>
*页面格式化xml
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>原生js格式化xml的方法</title></head><body><!--格式化后的xml写入的位置--><div id="writePlace"></div><script> //格式化代码函数,已经用原生方式写好了不需要改动,直接引用就好 String.prototype.removeLineEnd = function () { return this.replace(/(<.+?\s+?)(?:\n\s*?(.+?=".*?"))/g, '$1 $2') } function formatXml(text) { //去掉多余的空格 text = '\n' + text.replace(/(<\w+)(\s.*?>)/g, function ($0, name, props) { return name + ' ' + props.replace(/\s+(\w+=)/g, " $1"); }).replace(/>\s*?</g, ">\n<"); //把注释编码 text = text.replace(/\n/g, '\r').replace(/<!--(.+?)-->/g, function ($0, text) { var ret = '<!--' + escape(text) + '-->'; //alert(ret); return ret; }).replace(/\r/g, '\n'); //调整格式 var rgx = /\n(<(([^\?]).+?)(?:\s|\s*?>|\s*?(\/)>)(?:.*?(?:(?:(\/)>)|(?:<(\/)\2>)))?)/mg; var nodeStack = []; var output = text.replace(rgx, function ($0, all, name, isBegin, isCloseFull1, isCloseFull2, isFull1, isFull2) { var isClosed = (isCloseFull1 == '/') || (isCloseFull2 == '/' ) || (isFull1 == '/') || (isFull2 == '/'); //alert([all,isClosed].join('=')); var prefix = ''; if (isBegin == '!') { prefix = getPrefix(nodeStack.length); } else { if (isBegin != '/') { prefix = getPrefix(nodeStack.length); if (!isClosed) { nodeStack.push(name); } } else { nodeStack.pop(); prefix = getPrefix(nodeStack.length); } } var ret = '\n' + prefix + all; return ret; }); var prefixSpace = -1; var outputText = output.substring(1); //alert(outputText); //把注释还原并解码,调格式 outputText = outputText.replace(/\n/g, '\r').replace(/(\s*)<!--(.+?)-->/g, function ($0, prefix, text) { //alert(['[',prefix,']=',prefix.length].join('')); if (prefix.charAt(0) == '\r') prefix = prefix.substring(1); text = unescape(text).replace(/\r/g, '\n'); var ret = '\n' + prefix + '<!--' + text.replace(/^\s*/mg, prefix) + '-->'; //alert(ret); return ret; }); return outputText.replace(/\s+$/g, '').replace(/\r/g, '\r\n'); } function getPrefix(prefixIndex) { var span = ' '; var output = []; for (var i = 0; i < prefixIndex; ++i) { output.push(span); } return output.join(''); } //引用示例部分 //(1)创建xml格式或者从后台拿到对应的xml格式 var originalXml = '<?xml version="1.0"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Dont forget me this weekend!</body> </note>'; //(2)调用formatXml函数,将xml格式进行格式化 var resultXml = formatXml(originalXml); //(3)将格式化好后的formatXml写入页面中 document.getElementById("writePlace").innerHTML = "<xmp>"+resultXml+"</xmp>";</script></body></html>
*后台格式化json
package com.tools;/** * 格式化输入工具类 * * @author lizhgb * @date 2015-10-14 * @Modified 2017-04-28 * */public final class FormatUtil { /** * 打印输入到控制台 * * @param jsonStr * @author lizhgb * @Date 2015-10-14 下午1:17:22 */ public static void printJson(String jsonStr) { System.out.println(formatJson(jsonStr)); } /** * 格式化 * * @param jsonStr * @return * @author lizhgb * @Date 2015-10-14 下午1:17:35 * @Modified 2017-04-28 下午8:55:35 */ public static String formatJson(String jsonStr) { if (null == jsonStr || "".equals(jsonStr)) return ""; StringBuilder sb = new StringBuilder(); char last = '\0'; char current = '\0'; int indent = 0; boolean isInQuotationMarks = false; for (int i = 0; i < jsonStr.length(); i++) { last = current; current = jsonStr.charAt(i); switch (current) { case '"': if (last != '\\'){ isInQuotationMarks = !isInQuotationMarks; } sb.append(current); break; case '{': case '[': sb.append(current); if (!isInQuotationMarks) { sb.append("<br>"); indent++; addIndentBlank(sb, indent); } break; case '}': case ']': if (!isInQuotationMarks) { sb.append("<br>"); indent--; addIndentBlank(sb, indent); } sb.append(current); break; case ',': sb.append(current); if (last != '\\' && !isInQuotationMarks) { sb.append("<br>"); addIndentBlank(sb, indent); } break; default: sb.append(current); } } return sb.toString(); } /** * 添加space * * @param sb * @param indent * @author lizhgb * @Date 2015-10-14 上午10:38:04 */ private static void addIndentBlank(StringBuilder sb, int indent) { for (int i = 0; i < indent; i++) { sb.append(" "); } }}
阅读全文
0 0
- 从页面或者后台的角度格式化json或xml报文
- json或json数组从页面到后台的转化或从后台到前台的转换
- 格式化后台传到页面的JSON中的日期对象
- 一个从后台直接传输到后台的jquery easyui 的json页面
- JSON - 解析后台传的JSON或者JSON数组
- Ajax 异步或取后台数据json显示到页面
- android获取jsp页面输出的json报文出错
- 有关json和xml报文的解析和构造
- ajax获取后台数据,页面Json数据按照json格式化输出
- 原生js格式化json和格式化xml的方法
- Notepad++的Json格式化插件和xml格式化插件
- 页面Json格式化输出
- 关于java实体在xml报文和json报文之间的相互转换
- php的页面跳转或者从定向
- springmvc:jsp fmt标签格式化Date时间,格式化后可以用于页面展示或者提交给后台
- 从源代码角度看Struts2返回JSON数据的原理
- 从源代码角度看Struts2返回JSON数据的原理
- 从源代码角度看Struts2返回JSON数据的原理
- 前端经典面试题---网络篇
- 【DSP】TMS320F28035 GPIO外部中断例程
- XMind带你揭秘《战狼2》的心路历程
- 面试总结
- 我自己的计算机视觉知识结构
- 从页面或者后台的角度格式化json或xml报文
- Android 4.4 Graphic系统详解(2) VSYNC的生成
- LayerColor
- Struts理解
- 傻瓜与专家--《像外行一样思考,像专家一样实践》读书笔记
- android如何改变系统默认横竖屏方向
- 上楼梯问题,模余防止溢出
- zip总结
- js监听手机端的touch滑动事件