遇到相關的問題,花了兩天的時間來解決,深感來之不易,所以做如下的總結,希望遇到此問題的碼農能更快的找到解決辦法!
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= jsonArr.replace(/(?:\s*['"]*)?([a-zA-Z0-9]+)(?:['"]*\s*)?:/g, "\"$1\":");
或者使用如下的方法:jsonArr.replace(/(\s*?{\s*?|\s*?,\s*?)(['"])?([a-zA-Z0-9]+)(['"])?:/g, '$1"$3":');
當然,如果對於值的結果不存在特殊符號,也可以用上面的正則表達式來進行替換,可是對於我目前遇到的問題中,value值中包含_ = < > ,' 等等各種特殊符號,我還沒找到更好的正則表達式來進行替換,所以只能想到最笨的辦法來解決
jsonArr= jsonArr.replace(/":/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英寸 }];
因為內容帶有“:”,
-
(\w+):,誤處理"21:9超寬IPS曲面" -
[{,]\s*(\w+):,誤處理"17英寸(TN,5:4方屏)"
所以對於以上的json字符串就需要用最笨的辦法把value值增加雙引號
