我使用$.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].id
或data[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()
在我明确调用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)
这是错误的地方吗?我不应该先单独编码每个条目吗? :/
答案 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
});