JavaScript:将key名不带双引号的JSON字符串转换成JSON
对象的⽅法
根据上⾯的描述,JSON对象是由对象成员组成,⽽成员是由key-value键值组成。key值是⼀个字符串:
字符串由Unicode字符组成,⽤双引号包围,⽤反斜杠转义。可以是单个字符。⽤法跟C或Java⾥的字符串的⽤法相似。
但是,在现实应⽤中,很少有程序员知道JSON⾥的key需要⽤双引号包围,因为⼤多数的浏览器⾥并不需要使⽤双引号。所以,为什么多此⼀举要多写两个双引号呢?
规范的例⼦:
{
"keyName":34
}js获取json的key和value
不规范的例⼦:
{
keyName :34
}
虽然在浏览器⾥使⽤不规范的、不使⽤双引号的写法在浏览器⾥不会出现问题,但并不代表你可以在其它地⽅不会遇到问题,⽐如,你有⼀个字符串:
//字符串格式
'{ keyName : 34 }'
你想把它转换成JSON对象。把JSON字符串转换成JSON对象,需要使⽤JSON.parse()⽅法,对于上⾯的这种key名上不带双引号的的JSON字符串,使⽤JSON.parse()解析时会报错,⽆法解析。这就成了⼀个很⿇烦的问题。所以说,尽量使⽤规范的预防还是有好处的,尽管⼤多数时候你不会遇到问题。
那么,对于key名不带双引号的JSON字符串,如何将它转换成JSON对象呢?
最直接的⽅法是⼿⼯给key名加上双引号。
如果你不像⼿⼯添加,可以使⽤函数全⽂搜索追加双引号,⽐如下⾯的这段代码:
var json_string = "{ keyName : 34, 'keyCode' : '5554'}";
console.log(json_string);//{ keyName : 34, 'keyCode' : '5554'}
console.log(/(?:\s*['"]*)?([a-zA-Z0-9]+)(?:['"]*\s*)?:/g.test(json_string))//true
console.log(json_string.match(/(?:\s*['"]*)?([a-zA-Z0-9]+)(?:['"]*\s*)?:/g));//[" keyName :", " 'keyCode' :"]
json_string = place(/(?:\s*['"]*)?([a-zA-Z0-9]+)(?:['"]*\s*)?:/g, "'$1':");
console.log(json_string);//{'keyName': 34,'keyCode': '5554'}
var json = eval('('+ json_string + ')');
console.log(json);//Object {keyName: 34, keyCode: "5554"}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论