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= 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英寸 }];

因為內容帶有“:”,

  1. (\w+):,誤處理"21:9超寬IPS曲面"

  2. [{,]\s*(\w+):,誤處理"17英寸(TN,5:4方屏)"

所以對於以上的json字符串就需要用最笨的辦法把value值增加雙引號

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM