将key名不带双引号的JSON字符串转换成JSON对象的方法
2016-07-06 09:31
836 查看
转自:http://www.webhek.com/convert-unquoted-json-key-string-to-json-object?_biz=MjM5OTA1MDUyMA==&mid=407358558&idx=2&sn=b21877f23bf4063fa311185009c1f0b7&scene=0#wechat_redirect1467761888241?ref=myread
根据json.org上面的描述,JSON对象是由对象成员组成,而成员是由key-value键值组成。key值是一个字符串:
字符串由Unicode字符组成,用双引号包围,用反斜杠转义。可以是单个字符。用法跟C或Java里的字符串的用法相似。但是,在现实应用中,很少有程序员知道JSON里的key需要用双引号包围,因为大多数的浏览器里并不需要使用双引号。所以,为什么多此一举要多写两个双引号呢?规范的例子:{
"keyName" : 34
}不规范的例子:{
keyName : 34
}虽然在浏览器里使用不规范的、不使用双引号的写法在浏览器里不会出现问题,但并不代表你可以在其它地方不会遇到问题,比如,你有一个字符串://字符串格式
'{ keyName : 34 }'你想把它转换成JSON对象。把JSON字符串转换成JSON对象,需要使用
eval('var json = new Object(' + json_string + ')');最后,最简单的一种方法是直接用
根据json.org上面的描述,JSON对象是由对象成员组成,而成员是由key-value键值组成。key值是一个字符串:
字符串由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 + ')');但这样执行时,你需要理解执行的代码是什么,因为如果它里面含有一些恶意程序,你这样直接运行很可能引起安全问题。
相关文章推荐
- JS笔记
- 重拾javascript。
- MyEclipse2014中如何设置jsp文件打开后显示一个框里两个页面,上面是图,下面是代码
- HelloCharts的折线图跟json数据交互
- C++、Java、JavaScript中的正则表达式
- JavaScript基础
- javascript内建对象Date
- 比较正宗的验证邮箱的正则表达式js代码详解
- JS代码优化技巧之通俗版
- JavaScript学习笔记十五:箭头函数
- Javascript 基础---Ajax入门必看
- JS中Unexpected identifier异
- js单选框、复选框练习
- 洛谷 P1197 [JSOI2008]星球大战
- etxjs
- javascript策略模式(strategy)
- 年月日三级联动(纯JS)
- 我对Backbone.js的一些认识
- javascript 更新联动下拉列表框
- [Canvas] Introduction to drawing with p5js