如何从javascript中的json响应中获取变量?

如何从javascript中的json响应中获取变量?,javascript,json,Javascript,Json,我在从响应字符串中获取变量时遇到了问题。我的回答是: responseText = {'page':'2','endOfPage':'yes','content':'abc'} alert(responseText.page); var invalidJson = "{'page':'2','endOfPage':'yes','content':'abc'}"; validJson= invalidJson.replace(/\'/g, "\""); var obj = JSON.parse

我在从响应字符串中获取变量时遇到了问题。我的回答是:

responseText = {'page':'2','endOfPage':'yes','content':'abc'}

alert(responseText.page);
var invalidJson = "{'page':'2','endOfPage':'yes','content':'abc'}";
validJson= invalidJson.replace(/\'/g, "\"");
var obj = JSON.parse(validJson);
alert(obj.page);
返回未定义的,
有人能建议怎么做吗???

您需要使用eval函数将json转换为对象:

responseText = {'page':'2','endOfPage':'yes','content':'abc'}​​​​
var responseObject = eval(responseText);

alert(responseObject.page);

您的问题是,您的responseText实际上是一个字符串(
responseText=“{'page':'2','endOfPage':'yes','content':'abc'}”;
)。您首先必须解析它以创建一个对象,但这会失败,因为您使用的是单引号,而单引号不是有效的JSON-您需要使用双引号来解决此问题:

var json= "{ \"page\": 2, \"endOfPage\": \"yes\", \"content\": \"abc\" }";
var obj = JSON.parse(json);
alert(obj.page);
如果无法将JSON生成器实现更改为使用双引号返回响应,请尝试将每个单引号替换为双引号,如下所示:

responseText = {'page':'2','endOfPage':'yes','content':'abc'}

alert(responseText.page);
var invalidJson = "{'page':'2','endOfPage':'yes','content':'abc'}";
validJson= invalidJson.replace(/\'/g, "\"");
var obj = JSON.parse(validJson);
alert(obj.page);
  • 如果您使用的是jQuery,则可以使用以下方法:
responseText='{“页面”:“2”,“endOfPage”:“是”,“内容”:“abc”}'
responseText=jQuery.parseJSON(responseText)
警报(responseText.endOfPage)

  • 在Javascript中:

一些现代浏览器支持将JSON解析为原生js对象

我刚刚将其粘贴到浏览器的URL栏中,它发出了警报
2
。问题出在别处。是的,我把代码放进浏览器的控制台,它就工作了。你能给我们看一些关于这个的代码吗?@Quentin不,它不是,但它仍然可以在JavaScript中工作(比JSON更宽松)。看到了吗?我不知道它对你们是如何工作的,对我来说它返回未定义的值。@Coderanonymous-你使用短语“JSON响应”,这表明您是从某处获得JSON的,并且上面的代码并不准确地表示您拥有的代码。事实上,代码也表明了这一点。请告诉我们您真正在做什么。OP在哪里以字符串形式显示JSON对象?这个(OP):{'page':'2','endOfPage':'yes','content':'abc'}不等于这个(你的):“{'page':'2','endOfPage':'yes','content':'abc'}”;您可以将代码粘贴到JS控制台中,并且可以正常工作。是的,OPs代码可以在控制台中正常工作,因为responseText已经是一个对象了。但因为它可能是HTTP请求的响应,所以我假设它实际上是一个字符串,这就是它失败的原因。我认为这将更有效、更正确:validJson=invalidJson.replace(/“/g,\\\”).replace(/\n/g,\\\n”);六羟甲基三聚氰胺六甲醚。。。您的替换不起作用(它应该用
替换
,您的代码不更改单引号),并且Firefox不喜欢JSON中的
\“
。看,好的。谢谢你。但您能建议我不使用JSON,只需要使用一些函数从响应字符串中获取变量值吗?javascript是否允许这样做?有史以来最糟糕的建议,潜在的XSS安全漏洞。永远不要使用
eval()
解析JSON。是的,在这里使用eval也是我犯过的最严重的错误,现在我试图在没有它的情况下解决问题。考虑到原来的
responseText
实际上是被引用的(您的示例不是),唯一的方法是使用周围的参数来避免block语句的歧义。所以正确的代码应该是
eval('('+'{…}'+')@SeanKinsey两部分都错了。首先,根据OP的说法,JSON来自外部服务器——如何信任它?即使是这样,使用
eval()
仍然不是一个好的实践,因为它不是为之设计的。此外,只要执行所解析的数据,使用哪个库就无关紧要了-安全漏洞不在底层库中,而是在执行本身中。native
JSON.parse
可能更快,因为它可以使用更优化的解析器。