我在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":[{...},{...},{...}]}
答案 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函数。
使用此功能时有两种选择 -
将数据转换为数组。 json_decode($jsonString,true)
如果使用此方法,则可以像访问关联数组一样访问数据。 $jsonArray['results']['21']
将数据转换为对象。 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
等...