使用php

时间:2019-05-31 10:18:28

标签: php json

首先,感谢您的帮助。

我在尝试从在线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行

我在做什么错了?

再次感谢您的帮助!

3 个答案:

答案 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>";
  }
}

注意:- 使用schedmovie而非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);