如何在javascript中将字符串转换为json对象
我有下面的javascript方法。我尝试从数据参数中获取id如何在javascript中将字符串转换为json对象,javascript,json,Javascript,Json,我有下面的javascript方法。我尝试从数据参数中获取id data(spark, data){ console.log('receive ', data) console.log(data.id) } 第一个输出行是receive{id:1} 但是第二个输出行是未定义的 然后我尝试以下方法将json字符串转换为对象: data(spark, data){ console.log('receive ', data) console.log(JSON.pa
data(spark, data){
console.log('receive ', data)
console.log(data.id)
}
第一个输出行是receive{id:1}
但是第二个输出行是未定义的
然后我尝试以下方法将json字符串转换为对象:
data(spark, data){
console.log('receive ', data)
console.log(JSON.parse(JSON.stringify(data)).id)
我仍然得到相同的输出。为什么我不能从输入参数中获取id
EDIT1
我将参数名更改为与函数名不同,如下所示:
data(spark, d){
console.log('receive ', d)
console.log(JSON.parse(JSON.stringify(d)).id)
}
但我仍然得到了相同的输出。eval(“(“+data+”))。id是所需的全部
功能数据(火花、数据){
警报(eval(“(“+data+”)).id);
}
数据(“,{id:3}”)代码>
注意:强烈警告。只是看看这是否有效,它是否有效。不要在意外情况下使用它<很危险强>
一件疯狂的事情是,你忘记了函数名前面的函数
关键字
为此尝试使用eval()
:
功能数据(火花,d){
//console.log('receive',d);
评估(“d=”+d);
控制台日志(d.id);
}
数据(“,{id:5}”)代码>四个答案:
让服务器发送格式正确的JSON(键名周围带双引号)。这是首选的解决方案
使用轻松的JSON解析器。你可以在npm上搜索和找到这些东西
使用eval
执行一些字符串操作,将id
括在双引号中,这样您就可以JSON.parse
它,或者提取1
,或者执行任何您想执行的操作。这是最不可取的解决方案
注意,id
应该用双引号括起来,然后可以使用var json=json.parse(data);log(json.id)代码>为什么要使函数名和变量名相同?这不起作用。将函数名和变量名用作同一字符串。对于这种情况,您可以执行eval()
,但这完全不是建议的。同意Praveen的意见,我建议更改参数的名称,或者更改函数的名称。这是非常含糊的关于<代码>数据<代码>可能意味着在你的代码,也许你可以考虑改变你得到这个字符串的方法。我试过,但得到相同的输出,如果数据是“代码> { id”:1 }<代码>,但是数据是“代码> {ID:1 } /CODE>,所以JSON.PARSE将抛出一个error@slebetman试试看,这将起作用。否决这个答案的人请解释他们的理由。我看不出有什么问题?我的函数是在一个类(es6)中定义的,所以没有function关键字。我试过你的方法,效果很好。但这是危险的。还有其他方法吗?根据您当前的实现,我不确定是否有有效的方法。Downvoter可以告诉我一个原因<代码>:)
这个问题的正确“解决方案”是让服务器发送格式正确的JSON。@torazaburo同意。。。如果服务器不在OP的控制下怎么办。如果服务器不受控制怎么办?2.NPM?说真的?我不建议使用轻松/肮脏的解析器,但我认为它比eval好。你对npm有什么问题?你还会去哪里找呢?我以为NPM只适合节点?我错了吗?在浏览器中使用类似browserify或webpack的节点包非常简单。最疯狂的是,你要求我不要使用,你还添加了eval()
。