PHP - извлечение массива (объекта?) Из файла JSON

1

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

Этот 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 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.

Теги:
arrays

3 ответа

1
Лучший ответ

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

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

  • 0
    Вот ответ, который я искал: прямой доступ к предметам. Работает отлично.
  • 0
    Рад выручить!
0

Вам необходимо неэтериализовать данные

$jsondata = file_get_contents('http://mtgjson.com/json/BFZ.json');
$data = unserialize($jsondata);  
// Show the unserialized data;  
var_dump ($data);
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);

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню