将key名不带双引号的JSON字符串转换成JSON对象的方法
来源:互联网 发布:手机验钱软件 编辑:程序博客网 时间:2024/05/17 07:59
转自: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对象,需要使用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 + ')');
但这样执行时,你需要理解执行的代码是什么,因为如果它里面含有一些恶意程序,你这样直接运行很可能引起安全问题。
- 将key名不带双引号的JSON字符串转换成JSON对象的方法
- 将key名不带双引号的JSON字符串转换成JSON对象的方法
- 将key名不带双引号的JSON字符串转换成JSON对象的方法
- JavaScript:将key名不带双引号的JSON字符串转换成JSON对象的方法
- 缺少双引号的字符串转换成Json对象
- PHP去掉json字符串key的双引号
- JSON字符串key缺少双引号的解决方法
- JSON字符串key缺少双引号的解决方法
- JSON字符串key缺少双引号的解决方法
- JavaScript 将 JSON 字符串转换成 JSON 对象的数组
- 对象转换成JSON字符串的方法
- 字符串转换成json对象的方法
- 对象转换成json字符串的方法
- 将字符串转换为json对象的方法
- 将JSON对象转换成JSON字符串
- 将json字符串转换成json对象
- java将实体对象转换成JSON格式的字符串
- js 将json字符串转换为json对象的方法解析
- 深入浅出RxJava(一:基础篇)
- Python import以及os模块
- 17.3节练习
- 由浅入深探究mysql索引结构原理、性能分析与优化
- 堆和栈的区别,顺便介绍一下:全局区(静态区)、文字常量区、程序代码区
- 将key名不带双引号的JSON字符串转换成JSON对象的方法
- 教你禁用右键,也教你如何破解
- Android反编译分析工具
- 构建自己的 Git 服务器
- Spring学习总结(13)——Spring+Log4j+ActiveMQ实现远程记录日志
- 结构体指针错误分析
- 核心流程 - 【Dr.Elephant源码分析系列文章-2】
- Android Activity生命周期(一)
- 一点一点学C#1