2017-08-14 68 views
0

我有,我已经从一个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)); 

回答

0

我觉得你的问题是在你的JSON文件中的日期的格式,你有年月日,你应该改变格式与你的PHP代码兼容,或者PHP创建自己的格式相适应你的需要检查的官方文档:
http://php.net/manual/en/datetime.format.php

1

DateTime类是一个很好的替代品,可以帮助你实现你想要的。

例如。

$d = new DateTime($date); 
echo $d->format('d-m-Y H:i:s'); 
+0

谢谢!有效! – Brett

+0

乐于帮助,欢迎来到Stack Overflow。如果这个答案或任何其他人解决了你的问题,请将它标记为已接受:) – Fotis

1

问题是只有两个值,所以索引#2是未定义的。如果你改变你的代码,这样它会工作:

$date= $json_a['data']['loans']['values'][1]['plannedExpirationDate']; 

1970年的日期是一大线索 - 这意味着你的东西解析假-Y。

+0

这就是我的想法,但OP说'echo $ json_a ['data'] ['loans'] ['values'] [ 0] ['plannedExpirationDate'];'也没有工作。我会试着把测试用例放在一起。 –

+0

我做了,它工作。 –

+0

你说得对,必须是他们正在使用的2个索引 –

0

这是因为您使用的索引不正确而发生的。
这可以清楚地在解析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格式化解析值。