在PHP中获取JSON对象,而不是数组

时间:2013-04-05 11:34:46

标签: php json

我在php中编写一个网站,从另一个我创建的php-api获取JSONstring。 字符串如下所示:

{
    "result": "true",
    "results": {
        "20": {
            "id": "20",
            "desc": "a b ct tr",
            "active": "1",
            "startdate": "2013-04-03",
            "starttimehour": "18",
            "starttimemin": "0",
            "enddate": "2013-04-03",
            "endtimehour": "22",
            "endtimemin": "0",
            "creator": "a"
        },
        "21": {
            "id": "21",
            "desc": "test",
            "active": "0",
            "startdate": "2013-04-04",
            "starttimehour": "18",
            "starttimemin": "0",
            "enddate": "2013-04-04",
            "endtimehour": "22",
            "endtimemin": "0",
            "creator": "a"
        }
    }
}

我找到了很多关于如何从JSONarray获取信息的答案,但我没有在这里使用数组。 所以问题是:如何获得标记为20,21等的对象(这些数字由服务器生成,因此我不知道将返回哪些数据)。

或者我应该重写我的api如何将JSON作为数组返回。像这样:

{"result"="true", "results":[{...},{...},{...}]}

4 个答案:

答案 0 :(得分:2)

$json = json_decode($json_string, True);
foreach($json['results'] as $key => $value) {
    // access the number with $key and the associated object with $value
    echo 'Number: '.$key;
    echo 'Startdate: '.$value['startdate'];
}

答案 1 :(得分:0)

我想你是通过POST获取json而没有任何参数,比如

curl http://someapi.somedomain/someresource/ -X POST -d @data.json

所以基本上

$data = file_get_contents('php://input');
$object = json_decode($data);
print_r($object);

应该解决你的问题。和$ object将是你发布的json对象。

答案 2 :(得分:0)

您确实将JSON响应作为字符串获取。这就是JSON的工作方式。要将数据“转换”为易于访问的格式和结构,可以使用名为json_decode()的PHP函数。

使用此功能时有两种选择 -

  1. 将数据转换为数组。 json_decode($jsonString,true)
    如果使用此方法,则可以像访问关联数组一样访问数据。 $jsonArray['results']['21']

  2. 将数据转换为对象。 json_decode($jsonString)
    使用此方法,您将使用对象表示法来遍历数据 -
    $num = 21;
    $jsonObj->results->$num

答案 3 :(得分:0)

首先解码字符串($ string)然后你可以遍历它并获得对象的所有属性。请记住,访问属性是使用 - > prop而不是['prop']。这样您就不必以数组方式处理它。

$jsoned = json_decode($string);
    foreach($jsoned->results as $o) {
        foreach($o as $key => $value) {
            echo "The key is: ".$key." and the value is: ".$value."<br>";
        }
    }

工作示例将打印出来的内容:

关键是:id和值为:20

键是:desc和值是:a b ct tr

键是:有效且值为:1

等...