0

$.getJSON(url).done(function(data) {});我使用return this调用 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].idordata[1].medname或任何键时,它给了我undefinedor null

我的疑问是,返回的 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()

这是数组的 var_dump,在我明确调用之前json_encode(array);

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)

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

4

3 回答 3

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"}]

于 2013-08-12T07:25:09.040 回答
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/

于 2013-08-12T06:58:31.337 回答
0

如果您从服务器获取字符串值,则需要对其进行解析以获取对象:

$.getJSON(url).done(function(data) {
    var obj = JSON.parse(data);
    var obj1 = obj[0]; 
    // and so on
});
于 2013-08-12T06:58:34.807 回答