如何在数组中保存JSON对象?`

时间:2017-12-30 18:18:23

标签: php json

首先,这里是我使用

的代码
$json = file_get_contents('./releases.json');
$data = json_decode($json, TRUE);
$region = isset($_GET['region']) ? $_GET['region'] : null;

# if region is not null: ?region=8
if ($region) {
    $region_filter = function($v) use ($region) {
        // 8 == Worldwide
        if ($v['region'] == $region || $v['region'] == 8) {
            return true;
        } else {
            return false;
        }
    };
    $data = array_filter($data['data'], $region_filter);
}

header('Content-Type: application/json');
echo json_encode(array('data' => $data));

正如您所看到的,我使用数组('数据' => $ data)将我的JSON对象($ data)存储在名为' data'的数组中,但所有这一切都是创建一个父对象数据,其中所有其他对象不是数组,我该如何解决这个问题呢?非常感谢你!

releases.json示例:

{
"last_update_on": "2017-12-30",
"data": [{..}, {..}]
}

1 个答案:

答案 0 :(得分:0)

如果未设置$_GET['region'],则会跳过if块中的代码,因此其中仍然包含$data['data'],然后您使用array('data'=>$data)添加另一个级别。

但如果设置了$_GET['region'],则if块中的代码将删除它'data'的顶级$data = array_filter($data['data'], $region_filter);

换句话说,$data在结构上有所不同,具体取决于是否执行了if块代码。试试这个

$json = file_get_contents('./releases.json');
$data = json_decode($json, TRUE);
$data = $data['data'];
$region = isset($_GET['region']) ? $_GET['region'] : null;

# if region is not null: ?region=8
if ($region) {
    $region_filter = function($v) use ($region) {
        // 8 == Worldwide
        if ($v['region'] == $region || $v['region'] == 8) {
            return true;
        } else {
            return false;
        }
    };
    $data = array_filter($data, $region_filter);
}

header('Content-Type: application/json');
echo json_encode(array('data' => $data));