json使用带变量的类的url结果

时间:2016-01-26 13:16:14

标签: php json

pool.php包含返回json的代码。

[{"tickets":"0","users":"0","pool_range":"2016-01-24 - 2016-01-27"}]

pool.php基础

header('Content-Type: application/json');
$output = array_values($results);
$json = json_encode($output);
echo $json;

PHP

<?php
    date_default_timezone_set('America/New_York');
    $current_timestamp = date('Y-m-d') . "T" . date('H:i:s');
    $pool = new pool_data();

    var_dump($pool);

    class pool_data {
        public $users;
        public $tickets;
        public $pool_range;

        function __construct() {
            $pool_json = file_get_contents('./pool.php');
            $temp = json_decode($pool_json, true);
            $this->users = $temp["users"];
            $this->tickets = $temp["tickets"];
            $this->pool_range = $temp["pool_range"];
        }
    }
?>

当我var_dump $ pool

object(pool_data)#1 (3) {
  ["users"]=>
  NULL
  ["tickets"]=>
  NULL
  ["pool_range"]=>
  NULL
}

启用allow_url_fopen

if( ini_get('allow_url_fopen') ) {
    echo "I'm enabled";
} 

1 个答案:

答案 0 :(得分:1)

您的JSON文件返回对象数组(在此示例中为一个元素数组),但您将其用作关联数组。你确实将第二个json_decode参数传递给true,它将json解码为数组而不是对象,但是,你仍缺少一个维度。您可以var_dump来查看解码后的确切结构。

所以你的课应该是这样的:

class pool_data {
    public $users;
    public $tickets;
    public $pool_range;

    function __construct() {
        $pool_json = file_get_contents('./pool.php');
        $temp = json_decode($pool_json, true);
        $this->users = $temp[0]["users"];           //added [0]
        $this->tickets = $temp[0]["tickets"];       //added [0]
        $this->pool_range = $temp[0]["pool_range"]; //added [0]
    }
}

我已经在我的本地服务器上创建了这两个文件,它运行正常。 结果:

object(pool_data)[1]
  public 'users' => string '0' (length=1)
  public 'tickets' => string '0' (length=1)
  public 'pool_range' => string '2016-01-24 - 2016-01-27' (length=23)

如果包含此代码的文件已包含在例如其他地方的index.php中,则您也可能遇到相对路径问题。

可以肯定的是,您可以添加dirname(__DIR__),使其成为绝对路径。

更改此行:

        $pool_json = file_get_contents('./pool.php');

对此:

        $pool_json = file_get_contents(dirname(__DIR__) . '/pool.php');

这样可以确保您查看当前文件所在的目录。