2015-10-31 5 views
1

У меня есть файл JSON, и я хочу получить доступ к содержимому через PHP. Проблема заключается в доступе к массиву внутри файла JSON. Другие методы, предлагаемые на этом сайте, похоже, не работают. Пример структуры JSON находится внизу. PHP-код здесь является единственным PHP-кодом между моими открывающимися и закрывающимися тегами PHP.PHP - Извлечение массива (объекта?) Из файла JSON

Этот код PHP работает. Я получаю доступ к тому, что не является массивом.

$jsondata = file_get_contents('BFZ.json'); 
$data = json_decode($jsondata, true); 
$id = $data['name']; 
echo $id; 

Это не работает. Я пытаюсь получить доступ к разделу «имя» массива «карты» (объект?) В файле JSON.

$jsondata = file_get_contents('BFZ.json'); 
$data = json_decode($jsondata, true); 
$id = $data['cards']['name']; 
echo $id; 

Это также не работает:

$id = $data['cards']['name'][0]; 

Структура файла JSON с примером информации: (? Объекта)

   "name" : "Nemesis", 
       "code" : "NMS", 
     "gathererCode" : "NE", 
      "oldCode" : "NEM", 
"magicCardsInfoCode" : "ne", 
     "releaseDate" : "2000-02-14", 
      "border" : "black", 
       "type" : "expansion", 
      "block" : "Masques", 
     "onlineOnly" : false, 
      "booster" : [ "rare", ... ], 
      "cards" : [ {}, {}, {}, ... ] 

Структура "карты" массив файла JSON с примером информации:

  "name" : "Sen Triplets", 
     "manaCost" : "{2}{W}{U}{B}", 
      "cmc" : 5, 
     "colors" : ["White", "Blue", "Black"], 
      "type" : "Legendary Artifact Creature — Human Wizard", 
    "supertypes" : ["Legendary"], 
      "types" : ["Artifact", "Creature"], 
     "subtypes" : ["Human", "Wizard"], 
     "rarity" : "Mythic Rare", 
      "text" : "At the beginning of your upkeep, choose target opponent. 
        This turn, that player can't cast spells or activate 
        abilities and plays with his or her hand revealed. 
        You may play cards from that player's hand this turn.", 
     "flavor" : "They are the masters of your mind.", 
     "artist" : "Greg Staples", 
     "number" : "109", 
      "power" : "3", 
     "toughness" : "3", 
     "layout" : "normal", 
    "multiverseid" : 180607, 
     "imageName" : "sen triplets", 
      "id" : "3129aee7f26a4282ce131db7d417b1bc3338c4d4" 

Я получил файл JSON отсюда: http://mtgjson.com/. Файл ссылается на карточную игру Magic: the Gathering. Я использую PHP, потому что я намерен в конечном итоге загрузить данные в базу данных MySQL.

ответ

1

Похоже cards ключ содержит массив объектов JSON. json_decode() проанализирует его как таковой.

Учитывая, что $data['cards'][0]['name'] должно указывать имя первой карты. Аналогично, $data['cards'][1]['name'] должно указывать имя второй карты.

+0

Это ответ, который я искал: прямой доступ к элементам. Прекрасно работает. –

+0

Рад помочь! – MikeWu

0

Объект $ data ['name'], на который был направлен таргетинг, был одним из расширений.

Для доступа к списку карт вам необходимо получить доступ к массиву ['cards'], а затем с петлей вы можете получить все имена карт.

вы можете сделать это:

$jsondata = file_get_contents('http://mtgjson.com/json/BFZ.json'); 
$data = json_decode($jsondata, true); 

$cards = $data['cards']; 

$cardsName = array(); 
foreach ($cards as $card) { 
    $cardsName[] = $card['name']; 
} 

var_dump($cardsName); 

Это создаст массив будет все карты имя

0

Вы должны десериализируются данные

$jsondata = file_get_contents('http://mtgjson.com/json/BFZ.json'); 
$data = unserialize($jsondata); 
// Show the unserialized data; 
var_dump ($data);