JSON — Эхо STDIN, данный PHP-скрипту

Я пытаюсь использовать PHP для сценария командной строки. Я передаю ей строку json и пытаюсь прочитать значения, но получаю сообщение об ошибке echo $user_inputs["foo"];, почему это? Я забыл что-то о json_decode, или это об использовании STDIN?

my_test.php

// Get the STDIN.
$stdin = fopen('php://stdin', 'r');

// Initialize user_inputs_json which will be the entire stdin.
$user_inputs_json = "";

// Read all of stdin.
while($line = fgets($stdin)) {
$user_inputs_json .= $line;
}

// Create the decoded json object.
$user_inputs = json_decode($user_inputs_json);

// Try to echo a value. This is where I get my error (written out below).
echo $user_inputs["foo"];

fclose($stdin);

Запустите это в командной строке, чтобы передать в него JSON:

$ echo '{"foo":"hello world!", "bar": "goodnight moon!"}' | php my_test.php

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

Fatal error: Cannot use object of type stdClass as array in /Users/don/Desktop/my_test.php on line 20

0

Решение

По умолчанию json_decode преобразует строку JSON в объект PHP. Если вы хотите получить массив PHP, используйте второй параметр json_decode:

$user_inputs_array = json_decode($user_inputs_json, true);
1

Другие решения

Если вам нужно всегда обрабатывать переданный в JSON массив, установите второй json_decode параметр в true, чтобы заставить его декодировать как массив:

$user_inputs = json_decode($user_inputs_json, 1);
0

По вопросам рекламы [email protected]