Я пытаюсь использовать 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
По умолчанию json_decode преобразует строку JSON в объект PHP. Если вы хотите получить массив PHP, используйте второй параметр json_decode:
$user_inputs_array = json_decode($user_inputs_json, true);
Если вам нужно всегда обрабатывать переданный в JSON массив, установите второй json_decode
параметр в true, чтобы заставить его декодировать как массив:
$user_inputs = json_decode($user_inputs_json, 1);