无法从JSON页面上用PHP
我有,我已经从一个API,它看起来像下面拉了一些JSON数据显示日期时间:无法从JSON页面上用PHP
{
data: {
loans: {
totalCount: 301,
values: [
{
name: "Anastacia",
status: "fundRaising",
plannedExpirationDate: "2017-08-19T22:10:06Z"
},
{
name: "Mercy",
status: "fundRaising",
plannedExpirationDate: "2017-08-19T22:10:05Z"
}
]
}
}
}
我能够显示的名称和TOTALCOUNT页面,但不是计划的启发日期。
$json_a = json_decode($curl_response, true);
//This works:
echo $json_a['data']['loans']['values'][0]['name'];
//this does not:
echo $json_a['data']['loans']['values'][0]['plannedExpirationDate'];
//this does not either. It prints a date in 1970.
$date= $json_a['data']['loans']['values'][2]['plannedExpirationDate'];
echo date('d-m-Y H:i:s', strtotime($date));
我觉得你的问题是在你的JSON文件中的日期的格式,你有年月日,你应该改变格式与你的PHP代码兼容,或者PHP创建自己的格式相适应你的需要检查的官方文档:
http://php.net/manual/en/datetime.format.php
问题是只有两个值,所以索引#2是未定义的。如果你改变你的代码,这样它会工作:
$date= $json_a['data']['loans']['values'][1]['plannedExpirationDate'];
1970年的日期是一大线索 - 这意味着你的东西解析假-Y。
这就是我的想法,但OP说'echo $ json_a ['data'] ['loans'] ['values'] [ 0] ['plannedExpirationDate'];'也没有工作。我会试着把测试用例放在一起。 –
我做了,它工作。 –
你说得对,必须是他们正在使用的2个索引 –
这是因为您使用的索引不正确而发生的。
这可以清楚地在解析JSON如下所示的VAR转储中可以看出(请注意,你想要的是1,而不是2的指数):
array(1) {
["data"]=>
array(1) {
["loans"]=>
array(2) {
["totalCount"]=>
int(301)
["values"]=>
array(2) {
[0]=>
array(3) {
["name"]=>
string(9) "Anastacia"
["status"]=>
string(11) "fundRaising"
["plannedExpirationDate"]=>
string(20) "2017-08-19T22:10:06Z"
}
[1]=>
array(3) {
["name"]=>
string(5) "Mercy"
["status"]=>
string(11) "fundRaising"
["plannedExpirationDate"]=>
string(20) "2017-08-19T22:10:05Z"
}
}
}
}
}
一种更好的方式来与适当的指数一起做这个( running example):
<?php
$json = '{
"data": {
"loans": {
"totalCount": 301,
"values": [{
"name": "Anastacia",
"status": "fundRaising",
"plannedExpirationDate": "2017-08-19T22:10:06Z"
},
{
"name": "Mercy",
"status": "fundRaising",
"plannedExpirationDate": "2017-08-19T22:10:05Z"
}
]
}
}
}';
// to see the index more clerly we can use this
//var_dump(json_decode($json, true));
// to check for any parsing errors
switch (json_last_error()) {
case JSON_ERROR_NONE:
echo ' - No errors';
break;
case JSON_ERROR_DEPTH:
echo ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_STATE_MISMATCH:
echo ' - Underflow or the modes mismatch';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - Unexpected control character found';
break;
case JSON_ERROR_SYNTAX:
echo ' - Syntax error, malformed JSON';
break;
case JSON_ERROR_UTF8:
echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
break;
default:
echo ' - Unknown error';
break;
}
echo "\n";
$json_a = json_decode($json, true);
//This works:
echo $json_a['data']['loans']['values'][0]['name'];
echo "\n";
//this does not:
echo $json_a['data']['loans']['values'][0]['plannedExpirationDate'];
echo "\n";
//this does not either. It prints a date in 1970.
$date= $json_a['data']['loans']['values'][1]['plannedExpirationDate'];
echo date('d-m-Y H:i:s', strtotime($date));
?>
您还可以使用DateTime类可在PHP为plannedExpirationDate
格式化解析值。
谢谢!有效! – Brett
乐于帮助,欢迎来到Stack Overflow。如果这个答案或任何其他人解决了你的问题,请将它标记为已接受:) – Fotis