JSON结构和返回

时间:2017-09-02 14:16:17

标签: javascript php jquery json

我是Web服务的新手,发现了一个api.php文件,我能够连接到我的MSSQL服务器并检索信息而没有问题,所以这很棒。我现在想把我提取的数据放在一个html页面中。我不知道该怎么做,并且已经做了很多阅读以试图弄明白。我已经运行了通过JSON验证器返回的数据并进行了验证。任何人都可以给我关于如何在网页上进行显示的建议(这是为了概念证明)。我在IIS上...我尝试了很多东西,最新的是:

<!doctype html>
    <html>
        <head>
    </head>
        <body>
            <?php
            $json = file_get_contents('https://myurl.com/rest/api.php/content?filter=category,cs,10&columns=id_cr,title');
            $data = json_decode($json);
            echo "<pre>";
                print_r($data);
            echo "</pre>";
            exit;
        ?>
        </body>
</html>

以下是JSON数据输出的外观 - 不确定如何以此格式访问数据作为变量......

{
 "content_data": {
  "columns": [
   "id",
   "title"
  ],
  "records": [
   [
    41901,
    "Resources for Educational Excellence"
   ],
   [
    44230,
    "The Khan Academy"
   ],
   [
    145925,
    "Educating Your Child at Home"
   ],
  ]
 }
}

::: FIXED ::: 我终于让我的代码工作了!所以,最终的代码看起来像这样......

<!doctype html>
    <html>
        <head></head>
        <body>
            <?php
                $json = file_get_contents('http://myurl.com/rest_api/api_test.php/content_data?filter=category,cs,10&columns=id,title');
                $data = json_decode($json, TRUE);
                foreach ($data['content_data']['records'] as $rec) { 
                    echo $rec[0] .' '. $rec[1] . '<br />'; 
                } 
           ?>
     </body>
</html>

所以问题最终是当我在我的https服务器上有我的api_data时,我无法将任何结果拉回到我的php页面,但是当我将api_test.php文件移动到http服务器时,它就像魅力。谁能解释为什么会这样?谢谢!

另外,我只是想感谢大家的帮助,对我来说这是一个艰难的项目,但我学到了很多,下次应该更容易:)

3 个答案:

答案 0 :(得分:1)

在PHP中,如果将json_decode的第二个参数设置为TRUE以使其成为所有数组,则可以更轻松地访问数据。

这意味着您的数据:

$json = '{
 "content_data": {
  "columns": [
   "id",
   "title"
  ],
  "records": [
   [
    41901,
    "Resources for Educational Excellence"
   ],
   [
    44230,
    "The Khan Academy"
   ],
   [
    145925,
    "Educating Your Child at Home"
   ],
  ]
 }
}';

然后您就可以获得如下数据:

$data = json_decode($json, TRUE);

foreach( $data['content_data']['records'] as $record )
{
    echo '<p>' . $record[0] . '<br />
    ' . $record[1] . '</p>';
}

我刚测试了这段代码,它确实有效:

$json = file_get_contents('https://www.myurl.com/rest_api/api_test.php/content_data?filter=assignments_list,cs,c010&columns=id_cr,title');

$data = json_decode($json, TRUE);

foreach( $data['content_data']['records'] as $record )
{
    echo '<p>' . $record[0] . '<br />
    ' . $record[1] . '</p>';
}

答案 1 :(得分:1)

以下是如何将json数据解析为顶部有列名的html表。

<!doctype html>
    <html>
        <head>
    </head>
        <body>
        <?php
            $json = file_get_contents('https://myurl.com/rest/api.php/content?filter=category,cs,10&columns=id_cr,title');
            $data = json_decode($json, TRUE);
        ?>
        <table>
            <!--column names-->
            <tr>
                <?php
                foreach ($data['content_data']['columns'] as $cols) {
                    ?>
                    <td><?= $cols ?></td>
                    <?php
                }
                ?>
            </tr>

            <!--record rows-->
            <tr>
                <?php
                foreach ($data['content_data']['records'] as $rec) {
                    ?>
                    <td><?= $rec[0] ?></td>
                    <td><?= $rec[1] ?></td>
                    <?php
                }
                ?>
            </tr>
        </table>
        </body>
</html>

答案 2 :(得分:0)

当我测试JSON字符串时,它无效。

               [
                145925,
                "Educating Your Child at Home"
               ], //this comma has json_decode failing and outputs null

您可以检查资源,获取JSONString。

为了访问JSONObject的值,您可以像在数组中一样在PHP中访问它们。因此,只需使用TRUE作为$ json_decode的第二个参数。

$json_decode($data, TRUE);

然后例如你可以做到这一点。您可以使用更少的代码编写更清洁,但我测试了它并且它可以工作:

<!doctype html>
<html>
    <head>
</head>
    <body>
        <?php
        $json = '{
             "content_data": {
              "columns": [
               "id",
               "title"
              ],
              "records": [
               [
                41901,
                "Resources for Educational Excellence"
               ],
               [
                44230,
                "The Khan Academy"
               ],
               [
                145925,
                "Educating Your Child at Home"
               ]
              ]
             }
            }';

        $data = json_decode($json, TRUE);
        var_dump($data);
        echo "<pre>";
            //print out the data a
        echo "<h2>Data</h2>";

        echo "<table>";

        echo "<tr>";
        //access column data and print out the values
        echo "<td>". $data['content_data']['columns'][0]."</td>";
        echo "<td>". $data['content_data']['columns'][1]."</td>";

        echo "</tr>";



        for($i = 0; $i < count($data['content_data']['records']);$i++ ) {

            echo "<tr id=" .$data['content_data']['records'][$i][0] . ">";

            //acces records and print a table with that data
            echo "<td>" . $data['content_data']['records'][$i][0]."</td>";
            echo "<td>" . $data['content_data']['records'][$i][1]."</td>";

            echo "</tr>";
        }


        echo "</table>";
            //var_dump($data->content_data);
        echo "</pre>";
        exit;
    ?>
    </body>

结果就是这个

Result of that code