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 转储。

非常感谢任何帮助。

4

4 回答 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了。

于 2012-11-06T20:29:56.383 回答
3

您的 JSON 可能是一个字符串。你必须先解析它。利用

var obj = JSON.parse(data);
alert(obj.max_output_watts);
于 2012-11-06T20:29:45.800 回答
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"
 }
于 2012-11-06T20:33:38.340 回答
0

您必须解析为 JSON,因为它看起来不是 json,因为该方法未定义:

这是 jQuery 的符号:

data = $.parseJSON(data);

data.max_output_watts;

这是你应该如何做的:

data = JSON.parse(data);

data.max_output_watts;

问候!

于 2012-11-06T20:31:56.257 回答