1

我用 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

4 回答 4

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'];
}
于 2013-04-05T11:41:21.807 回答
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 对象。

于 2013-04-05T11:45:17.643 回答
0

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

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

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

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

于 2013-04-05T11:47:08.270 回答
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,值是:ab ct tr

键是:活动,值是:1

ETC...

于 2013-04-05T11:53:56.057 回答