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()
函数。