我正在跟踪一个使用foreach语句遍历json文件的教程。当然,在我遵循的示例中,此方法工作正常,但似乎无法使其在我的版本上正常工作。我认为该错误表明我实际上没有在传递数组。这是否意味着问题出在json文件中?还是有语法问题?
警告:第27行的C:\ xampp \ htdocs \ loops \ json_example.php中为foreach()提供的参数无效
JSON文件:movies.json
{ //json object
"movies": [ //movies = array
{
"title": "The Godfather",
"year": "1972",
"genre": "Drama",
"director": "Francis Ford Copolla"
},
{
"title": "Superbad",
"year": "2007",
"genre": "Comedy",
"director": "Greg Mottola"
},
{
"title": "The Departed",
"year": "2006",
"genre": "Drama",
"director": "Martin Scorsese"
},
{
"title": "Saving Private Ryan",
"year": "1998",
"genre": "Action",
"director": "Steven Spielberg"
},
{
"title": "The Expendables",
"year": "2010",
"genre": "Action",
"director": "Sylvester Stallone"
}
]
}
PHP代码:json_example.php
<?php
$jsondata = file_get_contents("movies.json"); #set variable, function "file_get_contents" grabs everything in the file. can also use with a website is url is within () to insert entire site.
$json = json_decode($jsondata, true); #decodes json so that we can parse it
?>
<!DOCTYPE html>
<html>
<head>
<title>JSON Example</title>
</head>
<body>
<div id="container">
<h1>My Favorite Movies</h1>
<ul>
<?php
foreach($json['movies'] as $key => $value) {
echo '<h4>'.$value['title'].'</h4>';
echo '<li>Year: '.$value['year'].'</li>';
echo '<li>Genre: '.$value['genre'].'</li>';
echo '<li>Director: '.$value['director'].'</li>';
}
?>
</ul>
</div>
</body>
</html>
请原谅我的评论,我还在学习。
答案 0 :(得分:0)
您的json_decode由于错误的json格式而失败。 JOSN格式错误
$test =' { //json object
"movies": [ //movies = array
{
"title": "The Godfather",
"year": "1972",
"genre": "Drama",
"director": "Francis Ford Copolla"
}]}';
json内的任何注释都将被视为json字符串,而由于格式错误,导致json解码失败
$decode = json_decode($test,TRUE) ; // fails to decode due to bad json if you var_dump($decode) result in null
删除json字符串中的注释
$test =' {
"movies": [
{
"title": "The Godfather",
"year": "1972",
"genre": "Drama",
"director": "Francis Ford Copolla"
}]}';
答案 1 :(得分:0)
为foreach()提供的参数无效
表示您使用的$json['movies']
foreach($json['movies'] as $key => $value) {
不是数组或对象。 Finally have my title:
foreach仅适用于数组和对象,当您尝试在具有不同数据类型的变量或未初始化的变量上使用它时,将发出错误消息。
从理论上讲,$json = json_decode($jsondata, true);
应该产生一个包含键'movies'
的数组,其中包含电影数组,但是由于您收到无效的参数警告,这意味着由于某种原因没有发生
如果您的movie.json文件确实包含注释,那就是原因。正如其他人所说,The PHP documentation states。
如果文件中实际上没有注释,或者如果您删除了注释但仍未获得所需的数组,则可以使用JSON cannot contain comments或json_last_error
来帮助诊断问题。
对于由于某种原因而无法解析输入文件的情况,您应在代码中包含某种错误处理。在这种情况下,可能是因为您在不知不觉中添加了注释,但是将来如果您从其他来源获取文件,则可能无法控制其内容。仅检查if (is_array($json['movies']))
就足以验证您可以使用foreach进行迭代。您要如何处理自己不想要的情况。