首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助显示JSON数据

需要帮助显示JSON数据
EN

Stack Overflow用户
提问于 2020-07-01 17:19:45
回答 2查看 68关注 0票数 0

我请求一个JSON数据提要,并成功地返回数据。我正在尝试创建PHP代码,以便在我的网站上显示结果,而且我被它的一部分卡住了。我花了好几天的时间试图弄清楚,并做了无数次的搜索。

我已经显示了下面返回的JSON数据,并将其分成三部分,以显示我的问题所在。方括号内的中心部分可以用我编写的代码显示OK,也可以进一步向下显示。但第一部分和最后部分我就是搞不清楚。

代码语言:javascript
复制
{"status":"success","postcode":"CC3 3FF","postcode_type":"full","url":"https:\/\/propjsondata.co.uk\/draw?input=AA3+3FF","type":"terraced_house","max_age":18,"data":{"points_analysed":50,"radius":"1.12","date_earliest":"2019-01-14","date_latest":"2020-02-14","average":266,"70pc_range":[228,316],"80pc_range":[218,350],"90pc_range":[216,361],"100pc_range":[123,493],"raw_data":

    ///With the first part it doesn’t work how do I code this to display///The following between the square brackets displays fine///

[{"date":"2019-11-14","address":"20, Crowhurst Road, AA3 3JW","price":247000,"bedrooms":3,"type":null,"sqf":678,"price_per_sqf":364,"distance":"0.07"},{"date":"2019-08-16","address":"23, Crowhurst Road, AA3 3JW","price":225000,"bedrooms":3,"type":null,"sqf":1033,"price_per_sqf":218,"distance":"0.07"},{"date":"2019-02-26","address":"27, Crowhurst Road, BB3 3JW","price":246000,"bedrooms":3,"type":null,"sqf":775,"price_per_sqf":317,"distance":"0.07"},{"date":"2019-05-31","address":"39, Papillon Road, CC3 3JG","price":231000,"bedrooms":3,"type":null,"sqf":732,"price_per_sqf":316,"distance":"0.16"},{"date":"2019-09-27","address":"85, Creffield Road, CC3 3JB","price":352000,"bedrooms":3,"type":null,"sqf":1152,"price_per_sqf":306,"distance":"0.35"},{"date":"2019-04-08","address":"67, Creffield Road, DD3 3JB","price":385000,"bedrooms":3,"type":null,"sqf":1087,"price_per_sqf":354,"distance":"0.35"},{"date":"2019-07-05","address":"61, Butt Road, DD3 3DG","price":238000,"bedrooms":3,"type":null,"sqf":840,"price_per_sqf":283,"distance":"0.37"},{"date":"2019-09-13","address":"83, New Kiln Road, DD3 3QL","price":280000,"bedrooms":3,"type":null,"sqf":1033,"price_per_sqf":271,"distance":"0.42"},{"date":"2019-03-22","address":"74, North Station Road, EE1 1SE","price":221000,"bedrooms":3,"type":null,"sqf":1798,"price_per_sqf":123,"distance":"0.45"},{"date":"2019-01-14","address":"6, Garland Road, FF2 7GD","price":272000,"bedrooms":3,"type":null,"sqf":1170,"price_per_sqf":232,"distance":"0.46"},{"date":"2019-09-20","address":"33, Wickham Road, GG3 3ED","price":280000,"bedrooms":3,"type":null,"sqf":775,"price_per_sqf":361,"distance":"0.48"}]

   ///if I add this it stops working how do I code this to display, happy to leave out though///

},"process_time":"2.53"}

经过大量阅读,这是我对代码的理解,正如我所说,方括号之间的主要部分显示,但我不能排序的顶部或底部的部分显示。

代码语言:javascript
复制
<HTML>
<HEAD>
<STYLE>
table, th, td {
  border: 1px solid black;
}
th, td {
  padding: 10px;
}
</STYLE></HEAD>
<BODY>
<TABLE>

<?php
$url= 'https://81b.co.uk/sold_prices.json';
$json = file_get_contents($url);
$resultdata = json_decode($json, true);
foreach ($resultdata as $data => $value)

    echo '<tr><td>'.$value ["date"] .'</td><td>'.$value ["address"] .'</td><td>'.$value [“price”]  .'</td><td>'.$value [“bedrooms”]  .'</td><td>'.$value [“type”]  .'</td><td>'.$value [“sqf”]  .'</td><td>'.$value [“price_per_sqf”]  .'</td><td>'.$value [“distance”]  .'</td></tr>';
?> 

</TABLE>  
</BODY>
</HTML>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-01 17:59:54

如果我正确地阅读了这篇文章,您从属性搜索API中得到的JSON看起来如下所示:

代码语言:javascript
复制
{
   "status":"success",
   "postcode":"CC3 3FF",
   "postcode_type":"full",
   "url":"https:\/\/propjsondata.co.uk\/draw?input=AA3+3FF",
   "type":"terraced_house",
   "max_age":18,
   "data":{
      "points_analysed":50,
      "radius":"1.12",
      "date_earliest":"2019-01-14",
      "date_latest":"2020-02-14",
      "average":266,
      "70pc_range":[
         228,
         316
      ],
      "80pc_range":[
         218,
         350
      ],
      "90pc_range":[
         216,
         361
      ],
      "100pc_range":[
         123,
         493
      ],
      "raw_data":[
         {
            "date":"2019-11-14",
            "address":"20, Crowhurst Road, AA3 3JW",
            "price":247000,
            "bedrooms":3,
            "type":null,
            "sqf":678,
            "price_per_sqf":364,
            "distance":"0.07"
         },
         {
            "date":"2019-08-16",
            "address":"23, Crowhurst Road, AA3 3JW",
            "price":225000,
            "bedrooms":3,
            "type":null,
            "sqf":1033,
            "price_per_sqf":218,
            "distance":"0.07"
         },
         {
            "date":"2019-02-26",
            "address":"27, Crowhurst Road, BB3 3JW",
            "price":246000,
            "bedrooms":3,
            "type":null,
            "sqf":775,
            "price_per_sqf":317,
            "distance":"0.07"
         },
         {
            "date":"2019-05-31",
            "address":"39, Papillon Road, CC3 3JG",
            "price":231000,
            "bedrooms":3,
            "type":null,
            "sqf":732,
            "price_per_sqf":316,
            "distance":"0.16"
         },
         {
            "date":"2019-09-27",
            "address":"85, Creffield Road, CC3 3JB",
            "price":352000,
            "bedrooms":3,
            "type":null,
            "sqf":1152,
            "price_per_sqf":306,
            "distance":"0.35"
         },
         {
            "date":"2019-04-08",
            "address":"67, Creffield Road, DD3 3JB",
            "price":385000,
            "bedrooms":3,
            "type":null,
            "sqf":1087,
            "price_per_sqf":354,
            "distance":"0.35"
         },
         {
            "date":"2019-07-05",
            "address":"61, Butt Road, DD3 3DG",
            "price":238000,
            "bedrooms":3,
            "type":null,
            "sqf":840,
            "price_per_sqf":283,
            "distance":"0.37"
         },
         {
            "date":"2019-09-13",
            "address":"83, New Kiln Road, DD3 3QL",
            "price":280000,
            "bedrooms":3,
            "type":null,
            "sqf":1033,
            "price_per_sqf":271,
            "distance":"0.42"
         },
         {
            "date":"2019-03-22",
            "address":"74, North Station Road, EE1 1SE",
            "price":221000,
            "bedrooms":3,
            "type":null,
            "sqf":1798,
            "price_per_sqf":123,
            "distance":"0.45"
         },
         {
            "date":"2019-01-14",
            "address":"6, Garland Road, FF2 7GD",
            "price":272000,
            "bedrooms":3,
            "type":null,
            "sqf":1170,
            "price_per_sqf":232,
            "distance":"0.46"
         },
         {
            "date":"2019-09-20",
            "address":"33, Wickham Road, GG3 3ED",
            "price":280000,
            "bedrooms":3,
            "type":null,
            "sqf":775,
            "price_per_sqf":361,
            "distance":"0.48"
         }
      ]
   },
   "process_time":"2.53"
}

而且,在上面的示例中,您已经裁剪出包含实际属性结果的raw_data数组。

完整的JSON数据似乎包含三个层。首先,根目录包含一些与搜索相关的元数据(搜索状态成功,您在邮政编码"CC3 3FF“中搜索房屋,等等)。其中有一个名为data的属性,它是一个包含更多关于搜索结果的元数据的对象。其中有一个名为raw_data的属性,它是一个实际结果的数组。

如果要打印这些结果,则需要访问这个raw_data数组,并在json_decode之后对其进行迭代。看看下面的示例--我已经将这些值内联在HTML中,以使其更易读,同时还提供了一个如何访问顶级数据的示例(在本例中是邮政编码):

代码语言:javascript
复制
<?php
    $url= 'https://81b.co.uk/sold_prices.json';

    $json = file_get_contents($url);
    $resultData = json_decode($json, true);
?>

<html>
    <head>
        <style>
            table, th, td {
              border: 1px solid black;
            }
            th, td {
              padding: 10px;
            }
        </style>
    </head>

    <body>

        <h1>Search for houses near <?php echo $resultData['postcode']; ?></h1>
        <table>
            <?php foreach ($resultData['data']['raw_data'] as $property) { ?>
                <tr>
                    <td><?php echo $property['date']; ?></td>
                    <td><?php echo $property['address']; ?></td>
                    <td><?php echo $property['price']; ?></td>
                    <td><?php echo $property['bedrooms']; ?></td>
                    <td><?php echo $property['type']; ?></td>
                    <td><?php echo $property['sqf']; ?></td>
                    <td><?php echo $property['price_per_sqf']; ?></td>
                    <td><?php echo $property['distance']; ?></td>
                </tr>
            <?php } ?>
        </table>

    </body>
</html>
票数 0
EN

Stack Overflow用户

发布于 2020-07-01 17:36:33

您的JSON结构是一个条目数组,但是您的问题是,您的一些项目是进一步的数组。这就是JSON的本质:)

代码语言:javascript
复制
foreach ($resultdata as $data => $value)

这意味着您要将整个数据数组拆分为有键和值的项。(键的变量'$data‘可能有点混乱,按照惯例,我们通常使用$key。)

我认为您想要完成的是输出每个项目的字段名,然后输出它的值;

因此,在foreach()内部,您可以这样写:

代码语言:javascript
复制
echo '<td>'. $data . ' : ' . $value .'</td>';

您将注意到通常在$value和[之间没有空格的惯例。

有时,$value本身就是一个数组,因此您希望将其分解为它的子元素:

您可以使用is_array进行简单的测试,如果它是一个数组,则可以使用与单个值不同的操作。这里有一个嵌套的foreach重写,它假设您的数据只有两层深度。

代码语言:javascript
复制
foreach ($resultdata as $key => $value) {
    if (is_array($value)) {
        // It's an array, iterate over it.
        foreach($value as $subkey => $subvalue) {
           echo '<td>'. $subkey . ' : ' . $subvalue .'</td>';
        }
    } else {
       // it's a single value
       echo '<td>'. $data . ' : ' . $value .'</td>';
    }
}

您可以利用这个机会,通过测试$key内容,过滤掉不想要的项,方法如下:

代码语言:javascript
复制
if(!(in_array($key, ['address','postcode']))) {
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62682144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档