JSON.parse不能将字符串更改为对象

时间:2017-07-19 18:29:38

标签: javascript json string

我有一个字符串

{ 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]);
}

我无法弄清楚如何将字符串转换为可以打印城市,国家,名称等的对象。

1 个答案:

答案 0 :(得分: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

希望它有所帮助。