2016-03-02 1 views
0

Мой файл JSON в следующем формате:JSON в PHP Error

{ 
    "library": [{ 
     "image": "css/covers/rainbow6siege.jpg", 
     "title": "Tom Clancy's Rainbow Six: Siege", 
     "system": ["PC", "Xbox-360", "Xbox One", "PS4"], 
     "genre": ["Shooter"], 
     "pegi_rating": "18", 
     "developer": "Ubisoft", 
     "release_year": "2015", 
     "max_team": "5" 
    }, { 
     "image": "css/covers/thedivision.jpg", 
     "title": "Tom Clancy's The Division", 
     "system": ["PC", "Xbox-360", "Xbox One", "PS4"], 
     "genre": ["Shooter", "MMO", "Action RPG"], 
     "pegi_rating": "15", 
     "developer": "Ubisoft", 
     "release_year": "2016", 
     "max_team": "3" 
    }] 
} 

Я подключен к базе данных, получили содержимое файла, декодируется его и пытается присвоить каждой переменной, связанной с ним JSON переменная. Использование кода:

$jsonData = file_get_contents('js/json/library.json'); 
    $data = json_decode($jsonData, true); 

    $gameImage = $data['image']; 

я использовал только один, как пример, но я получаю следующее сообщение об ошибке:

Notice: Undefined index: image in C:\MAMP\htdocs\iniDb.php on line 21 

Я не понимаю, где я неправильно.

+1

'print_r ($ data);' видеть. – AbraCadaver

+0

'json_last_error()' http://php.net/manual/en/function.json-last-error.php – Pitchinnate

+1

возможно '$ data ['library'] [0] ['image'];' –

ответ

0

Ваш $ данных представляет собой многомерный массив, состоящий из ассоциативного массива на первом уровне (клавиша «библиотека») и два числовых массивов на втором (0 и 1 - ваши ключи). Код ниже должен сделать:

$data['library'][0]['image'] 
0

После декодируется ваш JSON, благодаря опции , true вы использовали полученный результат выглядит следующим образом:

$data = [ 
    "library" => [ 
    [ 
     "image" => "css/covers/rainbow6siege.jpg", 
     "title" => "Tom Clancy's Rainbow Six => Siege", 
     "system" => ["PC", "Xbox-360", "Xbox One", "PS4"], 
     "genre" => ["Shooter"], 
     "pegi_rating" => "18", 
     "developer" => "Ubisoft", 
     "release_year" => "2015", 
     "max_team" => "5" 
    ], 
    [ 
     "image" => "css/covers/thedivision.jpg", 
     "title" => "Tom Clancy's The Division", 
     "system" => ["PC", "Xbox-360", "Xbox One", "PS4"], 
     "genre" => ["Shooter", "MMO", "Action RPG"], 
     "pegi_rating" => "15", 
     "developer" => "Ubisoft", 
     "release_year" => "2016", 
     "max_team" => "3" 
    ] 
    ] 
] 

Из этого становится очевидным, что $data['image'] не может быть найден!

Вы должны сделать что-то вроде этого:

foreach ($data as $member) { 
    foreach ($member['library'] as $library) { 
    foreach ($library as $element) { 
     echo $element['image']; 
    } 
    } 
} 
+0

Поймайте, почему это downvote. Мой ответ может быть неправильным, но любой, кто так думает, должен хотя бы объяснить, почему! – cFreed

+0

Кажется, тема стартер нуждается в очень упрощенном ответе на использование в качестве готового решения. Компенсированный. – Wizard

+0

@Wizard Я понимаю, что вы имеете в виду. Но OP сказал, что он хочет «назначить переменную _each_ своей связанной переменной JSON», а затем добавил: «Я использовал только один пример»: все это приводит к мысли, что ему нужно итерации. Anyay, большое спасибо за вашу поддержку! – cFreed

0

Если вы хотите перебрать декодированного коллекции JSON массива, это то, как вы это делаете:

// your json here 
$data = json_decode('{ 
    "library": [{ 
     "image": "css/covers/rainbow6siege.jpg", 
     "title": "Tom Clancy\'s Rainbow Six: Siege", 
     "system": ["PC", "Xbox-360", "Xbox One", "PS4"], 
     "genre": ["Shooter"], 
     "pegi_rating": "18", 
     "developer": "Ubisoft", 
     "release_year": "2015", 
     "max_team": "5" 
    }, { 
     "image": "css/covers/thedivision.jpg", 
     "title": "Tom Clancy\'s The Division", 
     "system": ["PC", "Xbox-360", "Xbox One", "PS4"], 
     "genre": ["Shooter", "MMO", "Action RPG"], 
     "pegi_rating": "15", 
     "developer": "Ubisoft", 
     "release_year": "2016", 
     "max_team": "3" 
    }] 
}' 
, true); 

foreach ($data['library'] as $library) 
{ 
    echo "<pre>"; 
    foreach ($library as $key => $value) 
    { 
     echo "<span style='color: #cc0000;'>$key</span> = "; 
     echo trim(print_r($value, true)) ."\r\n"; 
    } 
    echo "</pre><hr>"; 
} 

Выходы:

enter image description here

Например, если вы хотите заголовок каждого элемента библиотеки, это то, что вы делаете:

foreach ($data['library'] as $library) 
{ 
    echo "title = ". $library['title']; 
}