在JavaScript中从JSON获取值

4

你好,我有一个简单的JSON输出:

"{
   \"max_output_watts\": 150, 
   \"frame_length_inches\": \"62.20\",
   \"frame_width_inches\": \"31.81\"
 }"

我把它用在一个函数中:

...
$.getJSON(pop_model_dims_url, {model_id: selected}, function(data, jqXHR){
              alert(data.max_output_watts);
          });
...

警告目前只是一个占位符,但我不明白为什么警告值是“未定义”。如果我执行以下操作:
...
$.getJSON(pop_model_dims_url, {model_id: selected}, function(data, jqXHR){
              alert(data);
          });
...

我按预期获取了完整的JSON转储。
非常感谢任何帮助。

1
你真的有 \" 吗?还是这只是你生成 JSON 的方式? - Denys Séguret
1
@nathanhayfield 嗯?如果是JSON,你可以通过对象表示法访问它。为什么要迭代? - Madbreaks
\" 是使用Python的JSON序列化器生成转储的方式。 - Darwin Tech
2
alert(typeof data)会给你什么结果? - greggreg
1
@DarwinTech 很酷,那就解析它吧! - greggreg
显示剩余5条评论
4个回答

5

如果你的alert(data);给出了完整的JSON转储,那么这很可能意味着该JSON已在服务器上进行了双重编码

jQuery已经为你解析了一次,但你需要再次解析它。

$.getJSON(pop_model_dims_url, {model_id: selected}, function(data, jqXHR){
    data = $.parseJSON(data);
    alert(data.max_output_watts);
});

当然,这不是一个恰当的解决方法。正确的解决方案是在服务器上进行修复。

一旦你完成了修复,就不再需要$.parseJSON了。


好的这个可行。那我真的要解码两次吗?听起来很奇怪。 - Darwin Tech
1
@DarwinTech:不,这就是我在底部所说的要点。服务器端出了些问题导致它被编码两次。一旦你解决了这个问题,你将不再需要解析它,因为$.getJSON自动完成了。 - I Hate Lazy
1
噫,太简单了,以至于愚蠢。给这个人点赞,他们已经喝过咖啡了。 - Adam Tolley
1
完全正确。服务器上的代码错误意味着确实发生了双重编码任务。是我的错。感谢您的解释。 - Darwin Tech

3

你的JSON可能是一个字符串。你需要先解析它。使用

var obj = JSON.parse(data);
alert(obj.max_output_watts);

1

jQuery的getJSON应该自己解析JSON。 如果JSON是这样的:

"{
   \"max_output_watts\": 150, 
   \"frame_length_inches\": \"62.20\",
   \"frame_width_inches\": \"31.81\"
 }"

解析器将其误认为字符串。

它应该像这样显示为纯文本:

{
   "max_output_watts": 150, 
   "frame_length_inches": "62.20",
   "frame_width_inches": "31.81"
 }

让那个投反对票的人解释一下自己...(好吧,今天肯定有人起床气不顺) - iMoses
不,这是正确的,并且已经确认过了。谁给你点了踩错了这一回。 - Adam Tolley
好的,非常感谢您修复了排名 :) - iMoses
1
我没有点踩,但这个回答比其他说同样话(并提供解决方案)的回答早了5分钟。在我看来是无用的。 - Denys Séguret

0

你需要解析成JSON格式,因为它看起来不是一个JSON,由于该方法未定义:

以下是使用jQuery的表示法:

data = $.parseJSON(data);

data.max_output_watts;

以下是不使用的方法:

data = JSON.parse(data);

data.max_output_watts;

敬礼!


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