我尝试使用PHP解析JSON文件。但我现在被困住了。

这是我JSON文件的内容:

{
    "John": {
        "status":"Wait"
    },
    "Jennifer": {
        "status":"Active"
    },
    "James": {
        "status":"Active",
        "age":56,
        "count":10,
        "progress":0.0029857,
        "bad":0
    }
}

这是我目前为止所做的尝试:

<?php

$string = file_get_contents("/home/michael/test.json");
$json_a = json_decode($string, true);

echo $json_a['John'][status];
echo $json_a['Jennifer'][status];

但是因为我事先不知道名字(如“John”,“Jennifer”)和所有可用的键和值(如“age”,“count”),我认为我需要创建一些foreach循环。

我希望你能举个例子。


当前回答

我不敢相信这么多人在没有正确阅读JSON的情况下就发布了答案。

如果单独迭代$json_a,就得到了一个对象的对象。即使你传入了true作为第二个参数,你也得到了一个二维数组。如果你循环遍历第一个维度你不能像这样回显第二个维度。所以这是错误的:

foreach ($json_a as $k => $v) {
   echo $k, ' : ', $v;
}

为了反映每个人的状态,试试这个:

<?php

$string = file_get_contents("/home/michael/test.json");
if ($string === false) {
    // deal with error...
}

$json_a = json_decode($string, true);
if ($json_a === null) {
    // deal with error...
}

foreach ($json_a as $person_name => $person_a) {
    echo $person_a['status'];
}

?>

其他回答

最优雅的解决方案:

$shipments = json_decode(file_get_contents("shipments.js"), true);
print_r($shipments);

请记住,json文件必须使用UTF-8编码,不包含BOM。如果文件有BOM,那么json_decode将返回NULL。

另外:

$shipments = json_encode(json_decode(file_get_contents("shipments.js"), true));
echo $shipments;

Try:

$string = file_get_contents("/home/michael/test.json");
$json = json_decode($string, true);

foreach ($json as $key => $value) {
    if (!is_array($value)) {
        echo $key . '=>' . $value . '<br />';
    } else {
        foreach ($value as $key => $val) {
            echo $key . '=>' . $val . '<br />';
        }
    }
}

Try

<?php
$string = file_get_contents("/home/michael/test.json");
$json_a = json_decode($string,true);

foreach ($json_a as $key => $value){
  echo  $key . ':' . $value;
}
?>
$json_a = json_decode($string, TRUE);
$json_o = json_decode($string);



foreach($json_a as $person => $value)
{
    foreach($value as $key => $personal)
    {
        echo $person. " with ".$key . " is ".$personal;
        echo "<br>";
    }

}

使用foreach循环作为键-值对遍历JSON。进行类型检查,以确定是否需要执行更多循环。

foreach($json_a as $key => $value) {
    echo $key;
    if (gettype($value) == "object") {
        foreach ($value as $key => $value) {
          # and so on
        }
    }
}