2015-06-17 3 views
1

Я действительно борюсь с разбором данных JSON из API графиков Facebook. Я использую file_get_contents и json_decode для декодирования объектаPHP - Parse Facebook Post JSON

$json = file_get_contents($facebook_url); 
$obj = json_decode($json, true); 

Вот некоторые примеры JSON:

{ 
"data": [ 
    { 
    "place": { 
     "id": "134972803193847", 
     "name": "University of Southern California", 
     "location": { 
      "city": "Los Angeles", 
      "country": "United States", 
      "latitude": 34.021142052439, 
      "longitude": -118.28519155575, 
      "state": "CA", 
      "street": "3551 Trousdale Pkwy", 
      "zip": "90089" 
     } 
    }, 
    "picture": "https://fbcdn-vthumb-a.akamaihd.net/hvthumb-ak-xtf1/v/t15.0-10/xxxxxxxx", 
    "id": "xxxxxxxxxx", 
    "created_time": "2015-06-12T02:26:04+0000" 
    }, 
    { 
    "place": { 
     "id": "74286767824", 
     "name": "Los Angeles International Airport (LAX)", 
     "location": { 
      "city": "Los Angeles", 
      "country": "United States", 
      "latitude": 33.943998965589, 
      "longitude": -118.402533192, 
      "state": "CA", 
      "street": "1 World Way", 
      "zip": "90045" 
     } 
    }, 
    "picture": "https://scontent.xx.fbcdn.net/hphotos-xat1/v/t1.0-9/xxxxxxx", 
    "id": "xxxxxxxx12321", 
    "created_time": "2015-06-06T22:57:49+0000" 
    }, 
], 
"paging": { 
    "previous": "https://graph.facebook.com/v2.3/wfefwfwefwe", 
    "next": "https://graph.facebook.com/v2.3/fweewfwef" 
} 
} 

Я пробовал различные решения, но echo поддерживает печать «Array»

Я пытаюсь получите несколько полей для каждого сообщения, например, id, name, city, country, latitude, longitude, state, created_time, picture.

Я попробовал это, и он просто напечатал «Массив» кучу раз. Я знаю, что это простая проблема JSON-анализа/PHP.

foreach($obj['data'] as $chunk) { 
    foreach($chunk['place'] as $place) {  
    $fbid = $place['id']; 
    $name = $place['name']; 
    $location = $place['location']; 
    $city = $location['city']; 
    $country = $location['country']; 
    $latitude = $location['latitude']; 
    $longitude = $location['longitude']; 
    $state = $location['state']; 
    $tuple = array($fbid, $name, $city, $country, $latitude, $longitude, $state); 
    echo $tuple . "\n"; 
    } 
} 

ответ

1

echo печатает Array() потому, что вы бросаете массив в строку.

Чтобы напечатать массив в использовании print_r($obj); формата читабельного затем, чтобы напечатать идентификатор на первое место, например, использовать echo $obj['data'][0]['place']['id']; или цикл через все места и печать каждого использование ID

foreach ($obj['data'] as $a) { 
    echo $a['place']['id']; 
} 

You можно найти дополнительную информацию о print_r на страницах руководства PHP. http://php.net/manual/en/function.print-r.php

2

Live Demo

Ваш выход является объектом. Таким образом, вы не можете получить доступ к объекту по [.

Попробуйте это:

foreach($obj->data as $chunk) { 

    $fbid = $chunk->place->id; 
    $name = $chunk->place->name; 
    $location = $chunk->place->location; 
    $city = $location->city; 
    $country = $location->country; 
    $latitude = $location->latitude; 
    $longitude = $location->longitude; 
    $state = $location->state; 
    $tuple = array($fbid, $name, $city, $country, $latitude, $longitude, $state); 
    print_r($tuple); 

} 

ВЫВОД:

Array 
(
    [0] => 134972803193847 
    [1] => University of Southern California 
    [2] => Los Angeles 
    [3] => United States 
    [4] => 34.021142052439 
    [5] => -118.28519155575 
    [6] => CA 
) 
Array 
(
    [0] => 74286767824 
    [1] => Los Angeles International Airport (LAX) 
    [2] => Los Angeles 
    [3] => United States 
    [4] => 33.943998965589 
    [5] => -118.402533192 
    [6] => CA 
) 

Когда вам нужно распечатать массив, то вы не можете использовать echo. Вы должны использовать print_r или var_dump.

+0

Этот код дал мне предупреждение о том, что я передал неправильный объект в цикл foreach: / –