2017-07-19 26 views
0

我有一個字符串JSON.parse不能改變一個字符串轉換爲對象的工作

{ city : Chicago , country : us , name : Somebody , plan : quarter90wtrial },{ city : New York , country : us , name : Somebody , plan : quarter90wtrial },{ city : Portland , country : us , name : Somebody , plan : quarter90wtrial },{ city :null, country :null, name : Somebody , plan : quarter90wtrial },{ city : Mexico City , country : mx , name : Aaron , plan : quarter90wtrial },{ city : Boston , country : us , name : Somebody , plan : quarter90wtrial },{ city : Los Angeles , country : us , name : Somebody , plan : quarter90wtrial },{ city : London , country : gb , name : Aaron , plan : quarter90wtrial },{ city : Los Angeles , country : us , name : Aaron , plan : quarter90wtrial },{ city : Chicago , country : us , name : Aaron , plan : quarter90wtrial } 

我所要做的是把這個字符串轉換成一個對象,我可以遍歷並打印出城市,國家和每個人的名字。到目前爲止,我已經想出瞭如何分割字符串來單獨打印每行。

str = str.split('},{'); 
for(var i =0; i < str.length; i++) 
{ 
     alert(str[i]); 
} 

我想不通的是如何將字符串轉換爲一個對象,我可以打印出來的城市,國家,姓名等

+4

你發佈的內容不是有效的JSON,所以你不能使用'JSON.parse'。什麼創建這個字符串?任何機會讓你產生JSON?那將是最好的解決方案。 –

+0

從我的假設,你的字符串是缺少封閉的[[]'沒有它是無效的json –

+1

@ShubhamKhatri它也缺少大量的雙引號圍繞所有的屬性和值... – War10ck

回答

2

你有正確的初步設想。

然而,分裂法之後,你仍然需要這樣每對key:value地圖:

var str = '{ city : Chicago , country : us , name : Somebody , plan : quarter90wtrial },{ city : New York , country : us , name : Somebody , plan : quarter90wtrial },{ city : Portland , country : us , name : Somebody , plan : quarter90wtrial },{ city :null, country :null, name : Somebody , plan : quarter90wtrial },{ city : Mexico City , country : mx , name : Aaron , plan : quarter90wtrial },{ city : Boston , country : us , name : Somebody , plan : quarter90wtrial },{ city : Los Angeles , country : us , name : Somebody , plan : quarter90wtrial },{ city : London , country : gb , name : Aaron , plan : quarter90wtrial },{ city : Los Angeles , country : us , name : Aaron , plan : quarter90wtrial },{ city : Chicago , country : us , name : Aaron , plan : quarter90wtrial }'; 
 

 
var result = str.split('},{').map(function(itemStr) { 
 
    var itemObj = {}; 
 

 
    // here we map each "key:value" pair 
 
    itemStr.replace(/.*?(\w+) *: *(.*?) *[,}]/g, function(match, key, val) { 
 
     itemObj[key] = val; 
 
    }); 
 
    return itemObj; 
 
}); 
 

 
console.log(result)

你可以看到正則表達式在這裏工作:https://regex101.com/r/E5tg26/1

希望它有幫助。