如何在javascript中将字符串转换为json对象

如何在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

我有下面的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.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()