是的,我已经阅读过以前的问题,我知道如何访问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检索数据,但输出似乎不同。
答案 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有了更多的了解,它有一天会派上用场;)