Разбор JSON с PHP - PullRequest
       3

Разбор JSON с PHP

2 голосов
/ 25 октября 2011

У меня есть следующий контент JSON, который я извлекаю из канала службы:

[
   {
      "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 никогда не содержит ничего и является просто нулевым массивом. Есть идеи?

Ответы [ 2 ]

4 голосов
/ 25 октября 2011

В 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);  
}
2 голосов
/ 25 октября 2011

Вам нужно разобрать это так:

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

    )

)

Обязательно обращайте внимание на то, что является объектом, а что на массив, чтобы использовать соответствующие методы для доступа к данным (таким образом, объекты с -> нотацией и массивы с [] нотацией).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...