【问题标题】:How to decode Json data from php file into another php file?如何将 php 文件中的 Json 数据解码为另一个 php 文件?
【发布时间】:2020-04-08 11:48:38
【问题描述】:

我是创建 API 的新手,我创建了 2 个 files.php 1- API_ReadAll.php(其API代码执行后会返回Json结果)

示例执行以下链接: http://localhost:8080/To%20work%20on/API_FUNCTIONS/API_ReadAll.php

输出: 状态数据记录:

[
   {
      STATUS_ID: "14",
      STATUS_CODE: "AP 2013",
      STATUS_DESCRIPTION: "Amazing wheel"
   }, {
      STATUS_ID: "13",
      STATUS_CODE: "AP55.0",
      STATUS_DESCRIPTION: "A23 Powder"
   }, {
      STATUS_ID: "16",
      STATUS_CODE: "AP525.0",
      STATUS_DESCRIPTION: "Power Drink"
   }
]

2- Index.php(它是一个由 HTML 元素和表格组成的 php 文件,用于显示从上面页面检索到的数据)

我已尝试执行以下操作:

// path to your JSON file

$url = 'http://localhost:8080/To%20work%20on/API_FUNCTIONS/API_ReadAll.php'; 

$json = file_get_contents($url);

$data = json_decode($json,true);

 echo $data->STATUS_ID;

    foreach($data As $display){                     
      echo $display->STATUS_ID."<br>";
      echo $display->STATUS_CODE."<br>";
      echo $display->STATUS_DESCRIPTION."<br>";
    }

输出:

Warning: file_get_contents( http://localhost:8080/To%20work%20on/API_FUNCTIONS/API_ReadAll.php): failed to open stream: No such file or directory in C:\xampp\htdocs\To work on\Temp-Builder\SEED_STATUS.PHP on line 122

Notice: Trying to get property 'STATUS_ID' of non-object in C:\xampp\htdocs\To work on\Temp-Builder\SEED_STATUS.PHP on line 125


Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\To work on\Temp-Builder\SEED_STATUS.PHP on line 125

问题: 如何在 Index.php 中获取和获取上述 Json。

【问题讨论】:

    标签: php json api


    【解决方案1】:

    我首先建议您阅读以下指南create simple rest api with php(或您选择的任何其他教程),以进入 php 的 REST API 领域。

    您可以使用 curl 对它们执行请求,而不是将 api 端点作为文件处理。然后可以使用 php 内置的 json_decode 函数将该请求的结果解码为 json。

    为了让您有一个起点,我将您的方法应用于php.net 上的 curl 示例:

       // define api endpoint
       $url = 'http://localhost:8080/To%20work%20on/API_FUNCTIONS/API_ReadAll.php'; 
    
       // create curl resource
       $ch = curl_init();
    
       // set url
       curl_setopt($ch, CURLOPT_URL, $url);
    
       //return the transfer as a string
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    
       // $output contains the output string
       $output = curl_exec($ch);
    
       // close curl resource to free up system resources
       curl_close($ch);      
    
       $json_obj = json_decode($output)
    
    

    我还注意到,您将“true”作为第二个参数传递给json_decode()。这样,您将收到一个关联数组而不是一个对象。但是在您的示例中,您将其视为对象。

    还要注意 localhost 只能在您的本地网络中访问。因此,如果这是您的意图,这里的社区无法访问您的示例。

    祝你好运

    ----------------------------------------------- --------------------------

    感谢您的宝贵时间:

    关于您提供给我的链接,以了解有关如何构建 API 的更多信息。我确实从该链接中学习并构建了我的 API,并且我成功地实现了我正在寻找的东西。

    关于代码的第二点,链接的注释是的,肯定它只能从本地服务访问,我只是这样发布,试图弄清楚这是否是正确的方式。

    关于代码,我刚刚尝试了你的,但仍然无法显示以下错误:

    注意:试图在 C:\xampp\htdocs\To work on\Temp-Builder\INDEX.PHP 中获取非对象的属性 'STATUS_CODE'....

    代码:

        // define api endpoint
        $url = 'http://localhost:8080/To%20work%20on/Temp-Builder/API_FUNCTIONS/API_ReadAllSeed_Status.php'; 
    
        // create curl resource
         $ch = curl_init();
    
        // set url
           curl_setopt($ch, CURLOPT_URL, $url);
    
        //return the transfer as a string
           curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    
        // $output contains the output string
            $output = curl_exec($ch);
    
        // close curl resource to free up system resources
            curl_close($ch);      
    
             $json_obj = json_decode($output);
    
            foreach ($json_obj as $display){
    
                echo $display->STATUS_ID."<br>";
                echo $display->STATUS_CODE."<br>";
                echo $display->STATUS_DESCRIPTION."<br>";
           }
    

    【讨论】:

    • 首先,我编辑一个答案以形成一个回复有点滥用编辑功能。其次,只需阅读错误消息。你正在访问某事。作为一个不是的对象。所以我建议这是由您的 json 数据引起的,该数据在该位置不包含这样的对象。但是如果没有进一步的信息,这很难说,但是如果你仔细检查每个步骤并检查每个变量,它应该很容易找到。祝你好运和最好的问候
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 2018-10-14
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多