JSON解析与PHP
问题描述:
我有以下的JSON内容我是从一个服务进拉:JSON解析与PHP
[
{
"global_event":{
"ending_at":"2011-11-07T02:00:00Z",
"short_url":"http://bit.ly/reAhRw",
"created_at":"2011-10-04T14:25:41Z",
"event_responses":[
],
"addresses":{
"location":{
"city":"blah",
"latitude":30.205288,
"zipcode":"343434",
"street":"blah",
"longitude":-95.475289,
"state":"TX"
}
},
"body":"blahblahblah",
"euid":"2f489d0c82d167f1c16aba5d3b4c29ade6f1d52a",
"title":"Fusion",
"updated_at":"2011-10-04T14:26:57Z",
"event_roles":[
],
"user":{
"long_name":"Fusion Single",
"nickname":""
},
"event_items":[
],
"starting_at":"2011-11-07T00:00:00Z"
}
}
]
我试过下面的代码来解析它无济于事:
$json = @file_get_contents('jsonfeed');
$feed = json_decode($json);
foreach($feed->global_event as $item) {
$rss_item = array(
'title' => $item->title,
'link' => $item->short_url,
'author' => $item->long_name,
'content' => $item->body,
'date' => $item->updated_at,
'type' => 'Woodlands Church'
);
array_push($this->rss, $rss_item);
}
创建的最终数组$this->rss
从来没有任何内容,只是一个空数组。有任何想法吗?
答
在JSON中,花括号(“{”和“}”)定义对象,而不是数组。尖括号定义数组。
so $feed
是一个数组,其中包含1个对象,其中1个属性名为global_event
。
循环应该是:
$feed = json_decode($json);
foreach($feed as $obj) {
$item = $obj->global_event;
$rss_item = array(
'title' => $item->title,
'link' => $item->short_url,
'author' => $item->long_name,
'content' => $item->body,
'date' => $item->updated_at,
'type' => 'Woodlands Church'
);
array_push($this->rss, $rss_item);
}
+0
非常感谢您的帮助! – John
答
你需要这样分析它:
<?php
$json = @file_get_contents("jsonfeed");
$feed = json_decode($json);
foreach($feed as $item) {
// your code, accessing everything by using
// $item->global_event->PROPERTY
}
?>
因为你foreach
循环的开始你的$feed
变量是这样的:
Array
(
[0] => stdClass Object
(
[global_event] => stdClass Object
(
[ending_at] => 2011-11-07T02:00:00Z
[short_url] => http://bit.ly/reAhRw
[created_at] => 2011-10-04T14:25:41Z
[event_responses] => Array
(
)
[addresses] => stdClass Object
(
[location] => stdClass Object
(
[city] => blah
[latitude] => 30.205288
[zipcode] => 343434
[street] => blah
[longitude] => -95.475289
[state] => TX
)
)
[body] => blahblahblah
[euid] => 2f489d0c82d167f1c16aba5d3b4c29ade6f1d52a
[title] => Fusion
[updated_at] => 2011-10-04T14:26:57Z
[event_roles] => Array
(
)
[user] => stdClass Object
(
[long_name] => Fusion Single
[nickname] =>
)
[event_items] => Array
(
)
[starting_at] => 2011-11-07T00:00:00Z
)
)
)
请务必注意什么是一个对象以及什么是数组,以便使用适当的方法来访问数据(所以,带有 - >符号的对象和带有[]符号的数组)。
您foreaching这个数组是错误的。您的字段不在JSON数组中的'$ feed-> global_event'下。 – OptimusCrime