如何在JavaScript中将字符串转换为JSON对象

5
我有以下JavaScript方法。我尝试从数据参数中获取id。
data(spark, data){
    console.log('receive ', data)
    console.log(data.id)
  }

第一行输出是receive {id:1}

但第二行输出是undefined

然后我尝试使用以下方法将json字符串转换为对象:

data(spark, data){
    console.log('receive ', data)
    console.log(JSON.parse(JSON.stringify(data)).id)

我仍然得到相同的输出。为什么我不能从输入参数中获取id? 编辑1 我将参数名称更改为与函数名称不同,如下所示:
data(spark, d){
    console.log('receive ', d)
    console.log(JSON.parse(JSON.stringify(d)).id)
}

但是我仍然得到了相同的输出。

3
请注意,id 应该用双引号括起来,然后您可以使用 var json = JSON.parse(data); console.log(json.id); - Tushar
1
为什么你想要函数名和变量名相同? - randominstanceOfLivingThing
1
这样做不行。您正在将函数名称和变量名称都用作相同的字符串。对于这种情况,您可以使用 eval(),但这绝对不是建议的做法。 - Praveen Kumar Purushothaman
2
也许你可以考虑改变获取这个字符串的方式? - Tim Tonkonogov
1
你能提供完整的JSON字符串吗? - Sahadev
显示剩余8条评论
3个回答

2

注意:强烈警告。只是检查它是否有效,并且有效。不要在意外情况下使用它。非常危险!

一个疯狂的事情是,你忘记了在函数名前面加上 function 关键字。

尝试使用 eval() 进行此操作:

function data(spark, d) {
  // console.log('receive ', d);
  eval("d = " + d);
  console.log(d.id);
}
data("", "{id: 5}");


我的函数被定义在一个类(es6)中,所以没有函数关键字。我试过了你的方法,它能运行。但是很危险。有没有其他方法可以做到这一点? - Joey Yi Zhao
Downvoter能告诉我一个原因吗... :) - Praveen Kumar Purushothaman
为什么在这种情况下JSON.parse无法工作? - Joey Yi Zhao
1
这个问题的正确“解决方案”是让服务器发送正确格式的JSON。 - user663031
1
@torazaburo 同意... 如果服务器不在 OP 的控制之下怎么办? - Praveen Kumar Purushothaman
显示剩余4条评论

0

四个答案:

  1. 让服务器发送正确格式的JSON(键名用双引号括起来)。这是首选解决方案。

  2. 使用宽松的JSON解析器。你可以在npm上搜索并找到这样的工具。

  3. 使用eval

  4. 进行一些字符串操作,将id用双引号括起来,以便您可以对其进行JSON.parse,或提取1,或者您想要做的任何其他操作。这是最不理想的解决方案。


而最疯狂的部分是,你要求我不使用它,但你却添加了 eval() - Praveen Kumar Purushothaman
不同意Webpack的事情。如果它是共享主机怎么办? - Praveen Kumar Purushothaman
不,我并没有说不要使用 eval。我只是说有一个更好(“正确”)的解决方案。 - user663031
好的...我真诚地感觉你忽略了一个非常重要的点。让我们假设最坏的情况。OP正在使用共享主机,而服务器端不在控制之下。你会推荐什么? - Praveen Kumar Purushothaman
@PraveenKumar 无法解析您有关webpack的评论。如果OP在浏览器中运行JS程序,则可以通过一些预处理来将节点模块捆绑到JS中。这与他的网站托管位置无关。 - user663031
显示剩余5条评论

-2

只需要使用eval("(" + data + ")").id即可。

function data(spark, data) {
  alert(eval("(" + data + ")").id);
}

data("", "{id:3}");


我尝试了,但是得到了相同的输出。 - Joey Yi Zhao
如果数据是 {"id":1},那么这将起作用,但实际数据是 {id:1},因此 JSON.parse 将会抛出一个错误。 - slebetman
@slebetman 试一下,这个会起作用。 - mildog8
能否请给这个回答点踩的人解释一下他们的原因。我看不出来哪里有问题? - mildog8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接