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 相关文章推荐
jQuery 解析xml文件
Aug 09 Javascript
Js基础学习资料
Nov 23 Javascript
JavaScript中的闭包(Closure)详细介绍
Dec 30 Javascript
学习JavaScript设计模式之中介者模式
Jan 14 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
Jun 21 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
Aug 31 Javascript
使用JS代码实现点击按钮下载文件
Nov 12 Javascript
jQuery实现给input绑定回车事件的方法
Feb 09 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
Jun 26 Javascript
bootstrap Table插件使用demo
Aug 07 Javascript
详解mpvue小程序中怎么引入iconfont字体图标
Oct 01 Javascript
js实现九宫格布局效果
May 28 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求最大子序列和的算法实现
2011/06/24 PHP
php全局变量和类配合使用深刻理解
2013/06/05 PHP
PHP+MySQL实现的简单投票系统实例
2016/02/24 PHP
基于laravel-admin 后台 列表标签背景的使用方法
2019/10/03 PHP
Javascript引用指针使用介绍
2012/11/07 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
EasyUI 结合JS导出Excel文件的实现方法
2016/11/10 Javascript
JavaScript仿聊天室聊天记录
2016/12/27 Javascript
AngularJS实现tab选项卡的方法详解
2017/07/05 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
解决vue2中使用axios http请求出现的问题
2018/03/05 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
Python的Django框架中settings文件的部署建议
2015/05/30 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
在python下读取并展示raw格式的图片实例
2019/01/24 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
Python实现简单猜数字游戏
2021/02/03 Python
前端canvas水印快速制作(附完整代码)
2019/09/19 HTML / CSS
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
英国复古服装和球衣购买网站:3Retro Football
2018/07/09 全球购物
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
美国体育用品商店:Academy Sports + Outdoors
2020/01/04 全球购物
商务日语毕业生自荐信
2013/11/23 职场文书
给实习单位的感谢信
2014/02/01 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
大学班级学风建设方案
2014/05/01 职场文书
2015年英语教研组工作总结
2015/05/23 职场文书
mysql批量新增和存储的方法实例
2021/04/07 MySQL
用Python将库打包发布到pypi
2021/04/13 Python
Redis全局ID生成器的实现
2022/06/05 Redis
Redis实现分布式锁的五种方法详解
2022/06/14 Redis