jQuery .getJSON返回JSON但无法通过result.key访问

时间:2013-08-12 06:53:33

标签: php jquery json

我使用$.getJSON(url).done(function(data) {});调用REST服务器返回此

[
   "{"   id":1,
   "medname":"Medication No. 1",
   "qty":"2",
   "pDay":"3",
   "beforeAfterMeal":null
}", "{
   "id":3,
   "medname":"Medication No. 2",
   "qty":"1",
   "pDay":"1",
   "beforeAfterMeal":null
}", "{
   "id":4,
   "medname":"Medication 3",
   "qty":"4",
   "pDay":"1",
   "beforeAfterMeal":null
}
]
来自Chrome中的console.log

通过使用$ .each(),我可以循环3次(因此它知道JSON数组中有3个条目),但是当我使用时 data[1].iddata[1].medname或任何密钥,它会给我undefinednull

我的疑问是,返回的JSON数组是否正确?它是从json_encode()(PHP)返回的,所以我认为它是正确的。

另外,我尝试$.parseJSON()没有结果。

也许我在看错了地方?指针将是非常有用的。

这是服务器的原始返回值(在json_encode()之后):

[
  "{\"id\":1,\"medname\":\"Medication No. 1\",\"qty\":\"2\",\"pDay\":\"3\",\"beforeAfterMeal\":null}",
  "{\"id\":3,\"medname\":\"Medication No. 2\",\"qty\":\"1\",\"pDay\":\"1\",\"beforeAfterMeal\":null}",
  "{\"id\":4,\"medname\":\"Medication 3\",\"qty\":\"4\",\"pDay\":\"1\",\"beforeAfterMeal\":null}"
]

以上是否正确?如果没有,那么了解哪个部分确实是错误的对我来说很有用。

更新

我想我到了错误的地方。

以下是服务器中发生的情况,对于每个条目,它们使用json_encode()单独编码,并添加到数组中。最后,数组再次使用json_encode()

进行编码

在我明确调用json_encode(array);

之前,这是数组的var_dump
array (size=3)
  0 => string '{"id":1,"medname":"Medication No. 1","qty":"2","pDay":"3","beforeAfterMeal":null}' (length=81)
  1 => string '{"id":3,"medname":"Medication No. 2","qty":"1","pDay":"1","beforeAfterMeal":null}' (length=81)
  2 => string '{"id":4,"medname":"Medication 3","qty":"4","pDay":"1","beforeAfterMeal":null}' (length=77)

这是错误的地方吗?我不应该先单独编码每个条目吗? :/

3 个答案:

答案 0 :(得分:3)

好的,总结一下。

此处的错误是您已在阵列中的所有元素上运行json_encode,然后在完整阵列上再次运行json_encode。您应该只在完整阵列上运行一次。

错误的方式

$arr[] = json_encode(array('name' => 'hank'));
$arr[] = json_encode(array('name' => 'jofryhs'));
echo json_encode($arr);

结果:["{\"name\":\"hank\"}","{\"name\":\"jofryhs\"}"]

正确的方式

$arr = array(
    array('name' => 'hank'),
    array('name' => 'jofryhs')
);
echo json_encode($arr);

结果:[{"name":"hank"},{"name":"jofryhs"}]

答案 1 :(得分:0)

在php代码中使用:

<?php
    $c = array(array("id"=>1,
       "medname"=>"Medication No. 1",
       "qty"=>"2",
       "pDay"=>"3",
       "beforeAfterMeal"=>null),
    array("id"=>3,                  
       "medname"=>"Medication No. 2",
       "qty"=>"1",
       "pDay"=>"1",
       "beforeAfterMeal"=>null));

    echo json_encode($c, JSON_FORCE_OBJECT);
?>

这是正确的json格式

[
   {"id":1,
   "medname":"Medication No. 1",
   "qty":"2",
   "pDay":"3",
   "beforeAfterMeal":null
}, {
   "id":3,
   "medname":"Medication No. 2",
   "qty":"1",
   "pDay":"1",
   "beforeAfterMeal":null
}, {
   "id":4,
   "medname":"Medication 3",
   "qty":"4",
   "pDay":"1",
   "beforeAfterMeal":null
}
]

然后你可以使用

$.getJSON(url).done(function(data) {
    alert(data[0].id);
});

jsfiddle http://jsfiddle.net/suhailvs0/v8eGg/

答案 2 :(得分:0)

如果从服务器获得字符串值,则需要解析它以获取对象:

$.getJSON(url).done(function(data) {
    var obj = JSON.parse(data);
    var obj1 = obj[0]; 
    // and so on
});