Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php getJSON返回JSON,但可以';t通过result.key访问_Php_Jquery_Json - Fatal编程技术网

Php getJSON返回JSON,但可以';t通过result.key访问

Php getJSON返回JSON,但可以';t通过result.key访问,php,jquery,json,Php,Jquery,Json,使用$.getJSON(url).done(函数(数据){})调用REST服务器返回此 [ "{" id":1, "medname":"Medication No. 1", "qty":"2", "pDay":"3", "beforeAfterMeal":null }", "{ "id":3, "medname":"Medication No. 2", "qty":"1", "pDay":"1", "beforeAfterMeal"

使用
$.getJSON(url).done(函数(数据){})调用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
}
]
从console.log进入Chrome

通过使用$.each()我可以循环3次(因此它知道JSON数组中有3个条目),但是当我使用
数据[1].id
数据[1].medname
或任何键,它会给我
未定义的
null

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

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

也许我看错地方了?指针将大有帮助

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

以上是正确的吗?如果不是的话,我想知道哪一部分是错的

更新

我想我已经到了犯错误的地方了

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

这里是数组的var_转储,在我显式调用
json_encode(数组)之前

这就是错误所在吗?我是否应该先对每个条目单独编码/

在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);
?>
然后你可以用

$.getJSON(url).done(function(data) {
    alert(data[0].id);
});
JSFIDLE在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);
?>
然后你可以用

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

JSFIDLE

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

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

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

$.getJSON(url).done(function(data) {
    var obj = JSON.parse(data);
    var obj1 = obj[0]; 
    // and so on
});
好的,总结一下

这里的错误是,您在数组中的所有元素上运行了
json\u encode
,然后在整个数组上再次运行了
json\u encode
。您应该只在整个阵列上运行一次

走错了路

$arr[] = json_encode(array('name' => 'hank'));
$arr[] = json_encode(array('name' => 'jofryhs'));
echo json_encode($arr);
$arr = array(
    array('name' => 'hank'),
    array('name' => 'jofryhs')
);
echo json_encode($arr);
结果:
[“{\'name\”:“hank\”},“{\'name\”:“jofryhs\”}]

正确的方法

$arr[] = json_encode(array('name' => 'hank'));
$arr[] = json_encode(array('name' => 'jofryhs'));
echo json_encode($arr);
$arr = array(
    array('name' => 'hank'),
    array('name' => 'jofryhs')
);
echo json_encode($arr);
结果:
[{“name”:“hank”},{“name”:“jofryhs”}]

总而言之,是的

这里的错误是,您在数组中的所有元素上运行了
json\u encode
,然后在整个数组上再次运行了
json\u encode
。您应该只在整个阵列上运行一次

走错了路

$arr[] = json_encode(array('name' => 'hank'));
$arr[] = json_encode(array('name' => 'jofryhs'));
echo json_encode($arr);
$arr = array(
    array('name' => 'hank'),
    array('name' => 'jofryhs')
);
echo json_encode($arr);
结果:
[“{\'name\”:“hank\”},“{\'name\”:“jofryhs\”}]

正确的方法

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

结果:
[{“name”:“hank”},{“name”:“jofryhs”}]

JSON不正确,或者您是否以某种方式粘贴了它?通过任何json可视化工具运行它/lint/etcLet我尝试通过一些json可视化工具运行它,我会更新它原始返回是有效的json,但不是您所期望的,它将是一个包含三个字符串的数组,您运行json_编码的数组是什么样子的?json不正确,或者您是否以某种方式粘贴了它?通过任何json可视化工具运行它/lint/etcLet我尝试通过一些json可视化工具运行它,我会更新它原始返回是有效的json,但不是您所期望的,它将是一个包含三个字符串的数组,您运行json_编码的数组是什么样子的?这不起作用。事实上,给我一个意想不到的令牌。我认为我的
数据
已经是一个JSON对象,但不知何故,我无法使用data.key访问它。这不起作用。事实上,给我一个意想不到的令牌。我认为我的
数据
已经是一个JSON对象,但不知何故,我无法使用数据访问它。key@User016尽管如此,这确实是一个有效且重要的观察结果。。。这应该是一个评论…@User016尽管如此,它确实是一个有效且重要的观察结果。。。这应该是一个评论…好的,现在正式修复了。当指出多个json_编码的问题时,我正在修复这个问题。谢谢。好的,现在正式修好了。当指出多个json_编码的问题时,我正在修复这个问题。谢谢