Javascript将string转换为对象数组

我有一个NodeJS应用程序接受一个string(上传的input !)我没有控制input我只是build立一个REST服务来处理数据。

该string意味着一个JSON对象 数组 ,然后我可以通过循环来提取每个元素…

收到以下(作为string):

[ {Name: 'Jane', Id: '005b0000000MGa7AAG'}, {Name: 'Tom', Id: '005b0000000MGa7AAF'} ] 

当我尝试JSON.parse这个我得到

 SyntaxError: Unexpected token N 

所以可以理解,因为我知道这是无效的JSON

下一个string是有效的JSON并通过http://jsonlint.com/ :

 [ {"Name": "Jack", "Id": "005b0000000MGa7AAA"}, {"Name": "Jill", "Id": "005b0000000MGa7AAB"} ] 

我的问题是: 我如何接受第一个input并parsing它以允许:

 parsed[0]['Name'] == 'Jane' >> true 

我的第一本能是将stringreplace(例如名称为“名称”),然后尝试parsing它。 但是,如果有其他人有解决办法,我会很感激。

你可以用一些正则expression式来替代:

 var json = "[ {Name: 'Jane', Id: '005b0000000MGa7AAG'}, {Name: 'Tom', Id: '005b0000000MGa7AAF'} ]"; var newJson = json.replace(/([a-zA-Z0-9]+?):/g, '"$1":'); newJson = newJson.replace(/'/g, '"'); var data = JSON.parse(newJson); alert(data[0]["Name"]); 

首先,我们用引号包装属性名称,然后用双引号replace单引号。 这足以使其有效的JSON,然后可以parsing。

这是一个工作的例子


注意 :对于像这样的东西,通常使用RegEx并不理想,而且这种解决scheme只能在特定情况下工作(如本例)。 正如评论中提到的,如果数据值包含冒号,则会出现一个问题:

考虑到这一点,这是一个更可靠的解决scheme:

 var json = $("div").html(); var newJson = json.replace(/'/g, '"'); newJson = newJson.replace(/([^"]+)|("[^"]+")/g, function($0, $1, $2) { if ($1) { return $1.replace(/([a-zA-Z0-9]+?):/g, '"$1":'); } else { return $2; } }); var data = JSON.parse(newJson); alert(data[0]["Name"]); 

这将匹配以冒号结尾的任何variables(字母数字),但是将引用在引号之间find的任何匹配(即数据string值)

这是一个例子

创build一个JavaScript类,用你的input填充对象,然后使用JSON.stringify(object)来将其转换为干净的json以避免错误。 我在这里完整的post 。

注:如果使用IE7或更低版​​本,则必须添加JSON.js库以使用JSON.stringify()函数。

Interesting Posts