首页 > 解决方案 > 如何将 php 文件中的 Json 数据解码为另一个 php 文件?

问题描述

我是创建 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。

标签: phpjsonapi

解决方案


我首先建议您通读以下指南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>";
       }

推荐阅读