2011-10-25 143 views
2

我有以下的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从来没有任何内容,只是一个空数组。有任何想法吗?

+4

您foreaching这个数组是错误的。您的字段不在JSON数组中的'$ feed-> global_event'下。 – OptimusCrime

回答

4

在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

2

你需要这样分析它:

<?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 
      ) 

    ) 

) 

请务必注意什么是一个对象以及什么是数组,以便使用适当的方法来访问数据(所以,带有 - >符号的对象和带有[]符号的数组)。