JSON到PHP错误

JSON到PHP错误,php,json,Php,Json,我的JSON文件的格式如下: { "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"

我的JSON文件的格式如下:

{
    "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

我不明白我错在哪里

解码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"
    ]
  ]
]
foreach ($data as $member) {
  foreach ($member['library'] as $library) {
    foreach ($library as $element) {
      echo $element['image'];
    }
  }
}
由此看来,
$data['image']
显然找不到了

你必须这样做:

$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"
    ]
  ]
]
foreach ($data as $member) {
  foreach ($member['library'] as $library) {
    foreach ($library as $element) {
      echo $element['image'];
    }
  }
}

$data是一个多维数组,由第一级的关联数组(“库”键)和第二级的两个数字数组(0和1是键)组成。 下面的代码应该是:

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

如果要遍历解码的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>";
}

打印($data)
查看。
json_last_error()
可能
$data['library'][0]['image']@AbraCadaver这样做之后,我看到数组中有数组,但仍然不明白为什么分配图像会引发错误?我是否需要使用循环来处理JSON数组?我用下面的例子作为指导,[link[()@pitch0Wander为什么要投否决票。我的答案可能是错误的,但任何人都必须解释为什么!看来,主题启动者现在需要非常简单的答案来作为“随时可用”的解决方案。已补偿。@向导我明白你的意思。但OP说他想要“将每个变量分配给其关联的JSON变量”,然后添加了“我只使用了一个作为示例”:所有这一切导致他认为需要迭代。总之,非常感谢您的支持!