Я пытаюсь прочитать сообщение JSON в моем приложении PHP, и это мой php-код:
$json = file_get_contents('php://input'); $obj = json_decode($json, TRUE); echo $obj->{'S3URL'};
Когда я это делаю, я получаю следующую ошибку:
Trying to get property of non-object in setImage.php on line 25 (line 25 is the echo $obj->{'S3URL'}; line)
Это тело запроса запроса на страницу:
Request Url: http://localhost:8888/setImage.php Request Method: POST Status Code: 200 Params: { "S3URL": "http://url.com" }
Это заголовки запроса:
Accept: application/json Content-Type: application/json Connection: keep-alive Origin: chrome-extension: //rest-console-id User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML,
Однако, если я вместо этого выхожу из переменной $json
я получаю следующее:
S3URL=http%3A%2F%2Furl.com
Поэтому он выглядит как file_get_contents('php://input');
читает его как строку, а не как JSON, что затруднит его синтаксический анализ.
Любая идея, почему он не возвращается как JSON, или как я могу его вернуть, как JSON?
Использование json_decode
создает ассоциативный массив, а не объект. Вы можете рассматривать его как массив, а не объект. Если вы хотите объект, используйте это вместо:
$obj = json_decode($json);
См. Документацию по второму параметру json_decode()
:
assoc Когда TRUE, возвращенные объекты будут преобразованы в ассоциативные массивы.
Кроме того, как указал Йоханнес Х в комментариях, вывод echo $json;
указывает, что вы на самом деле не получаете JSON, в первую очередь, так что вам тоже нужно будет обратиться к этому. Вы спросили, почему это не JSON; не видя, как вы запрашиваете этот скрипт, нельзя сказать точно.
Проблема может заключаться в формировании php: // input (это поток только для чтения, который позволяет вам считывать необработанные данные из тела запроса). измените некоторые настройки из php.ini, попробуйте включить «allow_url_fopen».
$ obj = json_decode ($ json);
Просто удалите истину