繁体   English   中英

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

[英]jQuery .getJSON return JSON but can't access by result.key

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

[
   "{"   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或任何键时,它会给出我是undefined还是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)

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

好吧,总结一下。

这里的错误是您对数组中的所有元素都运行了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"}]

在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/

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM