无法遍历JSON(php)中的项目

时间:2018-12-09 08:47:12

标签: php json loops

我通过ajax将以下Json发送到test.php:

[{},{"product[]":"john","qty[]":"12","price[]":"100","total[]":"1200"},{"product[]":"juan","qty[]":"22","price[]":"3.5","total[]":"77"},{"product[]":"louis","qty[]":"99","price[]":"1.22","total[]":"120.78"},{"product[]":"paul","qty[]":"5","price[]":"2.1","total[]":"10.5"},{"product[]":"carl","qty[]":"9","price[]":"14","total[]":"126"},{"total_amount":"1533.00"}]

在我的php文件中,我试图遍历每个单独的产品[],数量[],价格[]和列表值:

<?php
    $obj = json_decode($_POST["mydata"]);
    header('Content-Type: application/json');

   // echo json_encode($obj[1]->{'product[]'}); //(works)


foreach($obj as $item) {


echo $item['product[]'].'<br>';
echo $item['price[]'].'<br>';
echo $item['qty[]'].'<br>';
echo $item['total[]'].'<br>';     
     }

?>

但这会引发错误。 我的循环出了什么问题?

2 个答案:

答案 0 :(得分:1)

该代码有几处错误,首先是您将其解码为对象,然后尝试将其用作数组。您需要将true作为第二个参数传递给json_decode(),以使其成为关联数组。

第二个是您的数组包含的元素没有全部详细信息。最后一个元素只有"total_amount",因此没有其他字段存在。这就是为什么我使用

if ( isset($item['product[]'])){

在输出数据之前检查对象...

$obj = json_decode($_POST["mydata"], true);
header('Content-Type: application/json');

foreach($obj as $item) {
    if ( isset($item['product[]'])){
        echo $item['product[]'].'<br>';
        echo $item['price[]'].'<br>';
        echo $item['qty[]'].'<br>';
        echo $item['total[]'].'<br>';
    }
}

答案 1 :(得分:0)

true作为第二个参数传递给json_decode

根据文档:

  

关联

     

为TRUE时,返回的对象将转换为关联数组。

因此您的代码变为:

$obj = json_decode($_POST["mydata"], true);

还请注意,数组中的第一个条目为空,因此您必须进行检查。