访问Json对象PHP(字符串不是数组)

时间:2015-07-24 18:26:49

标签: php json

是的,我已经阅读过以前的问题,我知道如何访问JSON对象以及如何将其转换为数组。我知道json_encode / decode。我的问题是我的JSON响应有一个字符串,数组和所有,当我直接访问数据时它总是返回NULL。

07-24 23:34:20.288    1140-1140/? E/NetworkScheduler.SchedulerReceiver﹕ Invalid parameter app
07-24 23:34:20.288    1140-1140/? E/NetworkScheduler.SchedulerReceiver﹕ Invalid package name : Perhaps you didn't include a PendingIntent in the extras

通常你可以直接访问这样的对象,这在我几天前上次访问脚本时效果很好:

  object(Unirest\Response)#8 (4) {
    ["code"]=>
      int(200)
    ["body"]=>
      string(666) "{ "ticker": "AAPL:US", ".."
    ["headers"]=>
    array(9) {
    [0]=>
    string(15) "HTTP/1.1 200 OK"

或者您可以使用带有true的json_decode将其转换为数组。

$response->body->ticker

然而,所有这些都不再适用。我相信他们用输出改变了一些东西,因为它刚刚工作,但我不知道。知道如何访问自动收报机数据吗?我使用不同的API测试它,并且相同的命令可以很好地从不同的API检索数据,但输出似乎不同。

2 个答案:

答案 0 :(得分:0)

$response->body是一个json字符串,假设你没有将它缩短到松散某些重要的,因此需要单独转换为PHP数据项。

作为一个表示对象的json字符串,为什么不将它转换为像这样的PHP对象

$body = json_decode($response->body);

然后你可以解决它的属性,如

$body->ticker

或者

$response->body = json_decode($response->body);

现在你可以按照预期解决它,即

$response->body->ticker

答案 1 :(得分:0)

好的,看完这个答案后终于解决了: PHP json_decode() returns NULL with valid JSON?

显然,正如我之前所说,这是一个格式化问题。如果对象包含非UTF8代码和/或BOM代码,我不知道JSON会返回NULL。

我无法找到任何物料清单代码,但我想有一些非UTF8正在破坏它。

长话短说这个有用:

$dec =  json_decode( preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $response->body), true );         
 echo $dec['ticker'];

至少我现在对JSON有了更多的了解,它有一天会派上用场;)