我请求一个JSON数据提要,并成功地返回数据。我正在尝试创建PHP代码,以便在我的网站上显示结果,而且我被它的一部分卡住了。我花了好几天的时间试图弄清楚,并做了无数次的搜索。
我已经显示了下面返回的JSON数据,并将其分成三部分,以显示我的问题所在。方括号内的中心部分可以用我编写的代码显示OK,也可以进一步向下显示。但第一部分和最后部分我就是搞不清楚。
{"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"}经过大量阅读,这是我对代码的理解,正如我所说,方括号之间的主要部分显示,但我不能排序的顶部或底部的部分显示。
<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>发布于 2020-07-01 17:59:54
如果我正确地阅读了这篇文章,您从属性搜索API中得到的JSON看起来如下所示:
{
"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中,以使其更易读,同时还提供了一个如何访问顶级数据的示例(在本例中是邮政编码):
<?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>发布于 2020-07-01 17:36:33
您的JSON结构是一个条目数组,但是您的问题是,您的一些项目是进一步的数组。这就是JSON的本质:)
foreach ($resultdata as $data => $value)这意味着您要将整个数据数组拆分为有键和值的项。(键的变量'$data‘可能有点混乱,按照惯例,我们通常使用$key。)
我认为您想要完成的是输出每个项目的字段名,然后输出它的值;
因此,在foreach()内部,您可以这样写:
echo '<td>'. $data . ' : ' . $value .'</td>';您将注意到通常在$value和[之间没有空格的惯例。
有时,$value本身就是一个数组,因此您希望将其分解为它的子元素:
您可以使用is_array进行简单的测试,如果它是一个数组,则可以使用与单个值不同的操作。这里有一个嵌套的foreach重写,它假设您的数据只有两层深度。
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内容,过滤掉不想要的项,方法如下:
if(!(in_array($key, ['address','postcode']))) {https://stackoverflow.com/questions/62682144
复制相似问题