JavaScript格式化json和xml的方法示例


Posted in Javascript onJanuary 22, 2019

本文实例讲述了JavaScript格式化json和xml的方法。分享给大家供大家参考,具体如下:

格式化json实例

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>原生js格式化json的方法</title>
</head>
<body>
<!--格式化后的json写入的位置-->
<div id="writePlace"></div>
<script>
 //格式化代码函数,已经用原生方式写好了不需要改动,直接引用就好
 var formatJson = function (json, options) {
  var reg = null,
    formatted = '',
    pad = 0,
    PADDING = ' ';
  options = options || {};
  options.newlineAfterColonIfBeforeBraceOrBracket = (options.newlineAfterColonIfBeforeBraceOrBracket === true) ? true : false;
  options.spaceAfterColon = (options.spaceAfterColon === false) ? false : true;
  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, ',');
  if (!options.newlineAfterColonIfBeforeBraceOrBracket) {
   reg = /\:\r\n\{/g;
   json = json.replace(reg, ':{');
   reg = /\:\r\n\[/g;
   json = json.replace(reg, ':[');
  }
  if (options.spaceAfterColon) {
   reg = /\:/g;
   json = json.replace(reg, ':');
  }
  (json.split('\r\n')).forEach(function (node, index) {
     var i = 0,
       indent = 0,
       padding = '';
     if (node.match(/\{$/) || node.match(/\[$/)) {
      indent = 1;
     } else if (node.match(/\}/) || node.match(/\]/)) {
      if (pad !== 0) {
       pad -= 1;
      }
     } else {
      indent = 0;
     }
     for (i = 0; i < pad; i++) {
      padding += PADDING;
     }
     formatted += padding + node + '\r\n';
     pad += indent;
    }
  );
  return formatted;
 };
 //引用示例部分
 //(1)创建json格式或者从后台拿到对应的json格式
 var originalJson = {"name": "binginsist", "sex": "男", "age": "25"};
 //(2)调用formatJson函数,将json格式进行格式化
 var resultJson = formatJson(originalJson);
 //(3)将格式化好后的json写入页面中
 document.getElementById("writePlace").innerHTML = '<pre>' +resultJson + '<pre/>';
</script>
</body>
</html>

这里使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码,可得如下运行结果:

{
    "name":"binginsist",
    "sex":"男",
    "age":"25"
}

格式化xml实例

在格式化XML时后台需要对返回数据做一下处理:

StringEscapeUtils.escapeHtml(po.getMsgBody())
<!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 = '<pre>' +resultXml + '<pre/>';
</script>
</body>
</html>

这里使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码,可得如下运行结果:

    Tove
    Jani
    Reminder
    Dont forget me this weekend!

Javascript 相关文章推荐
JqGrid web打印实现代码
May 31 Javascript
jquery插件EasyUI中form表单提交实例分享
Jan 11 Javascript
JS中的进制转换以及作用
Jun 26 Javascript
AngularJs IE Compatibility 兼容老版本IE
Sep 01 Javascript
JS返回只包含数字类型的数组实例分析
Dec 16 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
Apr 07 Javascript
JavaScript学习笔记之DOM基础操作实例小结
Jan 09 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
Jun 18 Javascript
layui 选择列表,打勾,点击确定返回数据的例子
Sep 02 Javascript
JS扁平化输出数组的2种方法解析
Sep 17 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
Apr 14 Javascript
JavaScript代码实现微博批量取消关注功能
Feb 05 Javascript
基于vue的验证码组件的示例代码
Jan 22 #Javascript
JavaScript中的&quot;=、==、===&quot;区别讲解
Jan 22 #Javascript
深入分析element ScrollBar滚动组件源码
Jan 22 #Javascript
js实现京东秒杀倒计时功能
Jan 21 #Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
Jan 21 #Javascript
JavaScript使用Math.random()生成简单的验证码
Jan 21 #Javascript
详解一个基于react+webpack的多页面应用配置
Jan 21 #Javascript
You might like
php 特殊字符处理函数
2008/09/05 PHP
php实现的漂亮分页方法
2014/04/17 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
2014/09/10 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
再论Javascript下字符串连接的性能
2011/03/05 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
JavaScript前补零操作实例
2015/03/11 Javascript
Angularjs material 实现搜索框功能
2016/03/08 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
2016/12/01 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
用p5.js制作烟花特效的示例代码
2018/03/21 Javascript
H5+C3+JS实现双人对战五子棋游戏(UI篇)
2020/05/28 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
js实现页面多个日期时间倒计时效果
2019/06/20 Javascript
vue 路由懒加载中给 Webpack Chunks 命名的方法
2020/04/24 Javascript
针对Vue路由history模式下Nginx后台配置操作
2020/10/22 Javascript
Python实现获取本地及远程图片大小的方法示例
2018/07/21 Python
将pip源更换到国内镜像的详细步骤
2019/04/07 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
pyqt5 实现工具栏文字图片同时显示
2019/06/13 Python
python将excel转换为csv的代码方法总结
2019/07/03 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
python多维数组分位数的求取方式
2020/03/03 Python
python 使用while循环输出*组成的菱形实例
2020/04/12 Python
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
新西兰优惠网站:Treat Me
2019/07/04 全球购物
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
24岁生日感言
2014/01/13 职场文书
小学生校园广播稿
2014/09/28 职场文书
秋冬农业生产标语
2014/10/09 职场文书
交通事故一次性赔偿协议书范本
2014/11/02 职场文书
创业计划书之淘宝网店
2019/10/08 职场文书