首先,感谢您的帮助。
我在尝试从在线JSON文件获取数据时遇到一些问题。我使用PHP(带有cURL)。我可以访问文件,并且可以回显并查看其中的所有“原始”数据。我想找到一种仅显示所需数据类型的方法(例如,仅电影)。我使用foreach,但收到通知和警告。
我尝试了json_decode的第二个参数,并尝试了foreach,但是它不起作用。我做了一些研究,但是即使尝试,也会出现相同的错误。我从文件开头尝试使用“电影”,但我也遇到相同的错误。是因为“电影”没有“ [”(也是两次)吗?然后,我尝试使用“ apiver”但存在相同的错误。
//getting the access of the file - cURL is working fine
$sJSON = see_json('link');
$aJSON = json_decode($sJSON, true);
foreach($aJSON->apiver as $mydatas) {
foreach ($mydatas->values as $value) {
echo $value->value . "<br>";
}
}
//beginning of the JSON file
"movie": {
"1010414": {
"title_fr": "Godzilla II - Roi des Monstres",
"lang_ov": "en",
"release_de_ch": "2019-05-30",
"title": "Godzilla: King of the Monsters",
"release_fr_ch": "2019-05-29",
"title_de": "Godzilla II: King of the Monsters",
"id": "1010414"
},
"1011095": {
"title_fr": "Le Parc des merveilles",
"lang_ov": "en",
"release_de_ch": "2019-04-11",
"title": "Wonder Park",
"release_fr_ch": "2019-04-03",
"title_de": "Willkommen im Wunder Park",
"id": "1011095"
//far in the file
"apiver": 210,
"sched": [
{
"ts": 1559201400,
"id": "VS1258",
"duration": 129,
"movie": "1012351",
"site": "SPE",
"aud": 3,
"age": "6/10",
"lang": "de"
},
{
"ts": 1559202300,
"id": "VM33930",
"duration": 85,
"movie": "1012655",
"site": "MOS",
"aud": 3,
"age": "6/6",
"lang": "de"
我想显示“ apiver”中的所有数据,但会导致2个错误:
注意:试图获取非对象的属性“ apiver” C:\ xampp \ htdocs \ Cinema Pathe \ curl.php,第28行
警告:为中的foreach()提供了无效的参数 C:\ xampp \ htdocs \ Cinema Pathe \ curl.php,第28行
我在做什么错了?
再次感谢您的帮助!
答案 0 :(得分:1)
由于您在true
中使用过json_decode()
,现在它已转换为普通数组,因此请使用索引来获取值。
$aJSON = json_decode($sJSON, true);
foreach($aJSON['sched'] as $mydatas) { //use sched or movie instead of apiver
foreach ($mydatas['values'] as $value) {
echo $value['value'] . "<br>";
}
}
或从true
中删除 json_decode()
以使用原始代码(对象样式)
$aJSON = json_decode($sJSON);
foreach($aJSON->sched as $mydatas) { //use sched or movie instead of apiver
foreach ($mydatas->values as $value) {
echo $value->value . "<br>";
}
}
注意:- 使用sched
或movie
而非apiver
进行迭代。
答案 1 :(得分:1)
首先,我建议您使用file_get_contents
内置函数从API提取内容。
$sJSON = file_get_contents("link");
现在开始解码JSON文件,json_decode
很好。但我建议您不要将true
用作第二个参数,因为它会将Object转换为Associative数组。
$response = json_decode($sJSON);
现在使用$response->movie
查看电影对象。
现在要遍历对象,使用foreach
循环并使用$value
变量
foreach ($response->movie as $key => $value) {
// Do something
}
现在,要获取单个对象,请在$value->title_fr
循环内使用foreach
,依此类推。
我正在举一个示例以换行显示电影名称
$sJSON = file_get_contents("link");
$response = json_decode($sJSON);
foreach ($response->movie as $key => $value) {
echo $value->title_fr;
echo "<br>";
}
答案 2 :(得分:0)
可以在您的$aJSON['apiver']
循环中更改为foreach()
或将此行$aJSON = json_decode($sJSON, true);
更改为$aJSON = json_decode($sJSON);