JavaScript:将key和value不带双引号的JSON字符串转换成
JSON对象的⽅法
遇到相关的问题,花了两天的时间来解决,深感来之不易,所以做如下的总结,希望遇到此问题的码农能更快的到解决办法!
var jsonArr= [{col:TO_CHAR(HZRQ,'YYYYMM'),type:=,values:201909},{col:RQ,type:=,values:201909}];
你想把它转换成JSON对象。把JSON字符串转换成JSON对象,需要使⽤JSON.parse()⽅法,对于上⾯的这种key名上不带双引号的的JSON字符串,使⽤JSON.parse()解析时会报错,⽆法解析。这就成了⼀个很⿇烦的问题。所以说,尽量使⽤规范的预防还是有好处的,尽管⼤多数时候你不会遇到问题。
如下的代码是把key加上双引号
jsonArr= place(/(?:\s*['"]*)?([a-zA-Z0-9]+)(?:['"]*\s*)?:/g, "\"$1\":");
或者使⽤如下的⽅法:place(/(\s*?{\s*?|\s*?,\s*?)(['"])?([a-zA-Z0-9]+)(['"])?:/g, '$1"$3":');
js获取json的key和value
当然,如果对于值的结果不存在特殊符号,也可以⽤上⾯的正则表达式来进⾏替换,可是对于我⽬前遇到的问题中,value值中包含_ = < > ,'等等各种特殊符号,我还没到更好的正则表达式来进⾏替换,所以只能想到最笨的办法来解决
jsonArr= place(/":/g, "\":\"").replace(/,"/g, "\",\"").replace(/},/g, "\"},").replace(/}]/g, "\"}]");
console.log("jsonArr=",eval(jsonArr) ); 或者使⽤ var json = eval('('+ jsonArr+ ')');
案例
var jsonArr2 = [{
"Color": 超窄边IPS,
"SkuId": 1365289,
"Size": 27英⼨
}, {
"Color": 21:9超宽IPS曲⾯,
"SkuId": 1742140,
"Size": 29英⼨
}, {
"Color": 17英⼨(TN,5:4⽅屏),
"SkuId": 1032147,
"Size": 17英⼨
}];
因为内容带有“:”,
1. (\w+):,误处理"21:9超宽IPS曲⾯"
2. [{,]\s*(\w+):,误处理"17英⼨(TN,5:4⽅屏)"
所以对于以上的json字符串就需要⽤最笨的办法把value值增加双引号

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。