2016-05-22 2 views
0

У меня есть этот PHP-код, и он работает, но содержимое request.json публикуется как строка, инкапсулирующая содержимое файла.PHP, Как загрузить файл в формате json?

Я хочу, чтобы на нем было размещено содержимое файла напрямую (текстовый файл, содержащий json). Как мне изменить этот код, чтобы $payload не был повторно инкапсулирован как строка перед отправкой?

Я предполагаю, что моя строка 'content' => json_encode($payload) нуждается в изменении, но не знаю PHP, чтобы знать, как его изменить.

$url = 'http://api.phantomjscloud.com/examples/helpers/requestdata'; 
$payload = file_get_contents ('request.json'); 

$options = array(
    'http' => array(
     'header' => "Content-type: application/json\r\n", 
     'method' => 'POST', 
     'content' => json_encode($payload) 
    ) 
); 
$context = stream_context_create($options); 
$result = file_get_contents($url, false, $context); 
if ($result === FALSE) { /* Handle error */ } 

var_dump($result); 

PS: Я не хочу использовать сторонние библиотеки, такие как curl или zend. Просто Php!

EDIT 1: уточнение для тех, кто жалуется JSON это просто текст.

EDIT 2:

при попытке либо 'content' => json_decode($payload)

Я получаю ошибку:

Warning: file_get_contents(http://api.phantomjscloud.com/examples/helpers/requestdata): failed to open stream: HTTP request failed! HTTP/1.0 411 Length Required 
in request.php on line 15 
bool(false) 

мои содержание request.json просты, если это имеет значение:

{ 
    "hi":"world" 
} 

EDIT 3:

@Nasreddine ответ является правильным. my request.json файл на самом деле не был прав json (я не инкапсулировал ключи в двойных кавычках), поэтому я получал ошибку http-response для плохой json.

спасибо, мой плохой :(

+3

Ваш вопрос не имеет никакого смысла. [Нет такого объекта, как объект JSON] (http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/). JSON представляет собой текстовый формат данных. HTTP - это протокол для передачи текста. Преобразование объекта в строку JSON, а затем включение его в тело запроса - это то, как вы делаете запрос JSON с HTTP. – Quentin

+0

Извините за путаницу, проблема в том, что строка из request.json снова экранируется как json, поэтому она отправляет строку содержимого файла, а не содержимое файла напрямую – JasonS

+0

Вам нужно отправить заголовок 'Content-Length' в соответствии с кодом ответа HTTP. –

ответ

3

Вы повторное кодирование, что уже JSON как текст JSon Так вместо этого:.

'content' => json_encode($payload) 

Используйте это:

'content' => $payload 
+0

EDIT: вы правы! – JasonS

+0

@JasonS рад, что я мог бы помочь. Счастливое кодирование :) – Nasreddine

1

Попробуйте это:

'content' => $payload

В конце концов, это:

'content' => json_decode($payload)

+0

Это не работает неудачно. Я думаю, что если бы мой файл был инкапсулирован в строку. Решение - это Насреддина. спасибо – JasonS

+0

Хорошо .... Я также сказал, что Nasreddine ''content' => $ payload'. Я не понимаю, почему вы не можете видеть это в моем ответе .... Ничего ... – nospor

+0

вы правы :) – JasonS