将key名不带双引号的JSON字符串转换成JSON对象的方法
2016-04-05 15:52
716 查看
根据json.org上面的描述,JSON对象是由对象成员组成,而成员是由key-value键值组成。key值是一个字符串:
字符串由Unicode字符组成,用双引号包围,用反斜杠转义。可以是单个字符。用法跟C或Java里的字符串的用法相似。
但是,在现实应用中,很少有程序员知道JSON里的key需要用双引号包围,因为大多数的浏览器里并不需要使用双引号。所以,为什么多此一举要多写两个双引号呢?
规范的例子:
不规范的例子:
虽然在浏览器里使用不规范的、不使用双引号的写法在浏览器里不会出现问题,但并不代表你可以在其它地方不会遇到问题,比如,你有一个字符串:
你想把它转换成JSON对象。把JSON字符串转换成JSON对象,需要使用
那么,对于key名不带双引号的JSON字符串,如何将它转换成JSON对象呢?
最直接的方法是手工给key名加上双引号。
如果你不像手工添加,可以使用函数全文搜索追加双引号,比如下面的这段代码:
最后,最简单的一种方法是直接用
但这样执行时,你需要理解执行的代码是什么,因为如果它里面含有一些恶意程序,你这样直接运行很可能引起安全问题。
原文地址:http://it.lindukj.cn/archives/210
字符串由Unicode字符组成,用双引号包围,用反斜杠转义。可以是单个字符。用法跟C或Java里的字符串的用法相似。
但是,在现实应用中,很少有程序员知道JSON里的key需要用双引号包围,因为大多数的浏览器里并不需要使用双引号。所以,为什么多此一举要多写两个双引号呢?
规范的例子:
{ "keyName" : 34 }
不规范的例子:
{ keyName : 34 }
虽然在浏览器里使用不规范的、不使用双引号的写法在浏览器里不会出现问题,但并不代表你可以在其它地方不会遇到问题,比如,你有一个字符串:
//字符串格式 '{ keyName : 34 }'
你想把它转换成JSON对象。把JSON字符串转换成JSON对象,需要使用
JSON.parse()方法,对于上面的这种key名上不带双引号的的JSON字符串,使用
JSON.parse()解析时会报错,无法解析。这就成了一个很麻烦的问题。所以说,尽量使用规范的预防还是有好处的,尽管大多数时候你不会遇到问题。
那么,对于key名不带双引号的JSON字符串,如何将它转换成JSON对象呢?
最直接的方法是手工给key名加上双引号。
如果你不像手工添加,可以使用函数全文搜索追加双引号,比如下面的这段代码:
json_string.replace(/(s*?{s*?|s*?,s*?)(['"])?([a-zA-Z0-9]+)(['"])?:/g, '$1"$3":'); eval('var json = new Object(' + json_string + ')');
最后,最简单的一种方法是直接用
eval()运行它:
var obj = eval('(' + invalid_json + ')');
但这样执行时,你需要理解执行的代码是什么,因为如果它里面含有一些恶意程序,你这样直接运行很可能引起安全问题。
原文地址:http://it.lindukj.cn/archives/210
相关文章推荐
- javascript异常处理机制
- js遍历jsonTree
- JavaScript的流程控制语句
- 使用JSPatch问题若干及解决方法
- 如何用 ANTLR 4 实现自己的脚本语言?
- JSON
- js获取用户的操作系统和浏览器版本的方法
- Dom Range-一个@功能的具体实现
- JavaScript中双叹号(!!)作用
- 使用json-lib包,实现xml转json时空值被转为中括号的解决办法
- javascript保存excel
- js--DOM--1.常用的节点类型
- 在编写前端网页的过程中用css和javascript的作用
- JS创建对象的几种方式
- ExtJS中xtype一览
- 常用js函数
- JavaScript的运算符
- 【新人笔记16.04.05】JS--事件绑定
- JSON和JSONP的区别
- Jsoup学习-使用Jsoup抓取页面数据