回应给PHP脚本的STDIN

时间:2014-10-10 21:30:29

标签: php json stdin

我正在尝试将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

2 个答案:

答案 0 :(得分:1)

默认情况下,json_decode将JSON字符串转换为PHP对象。如果你想获得PHP数组,请使用json_decode的第二个参数:

$user_inputs_array = json_decode($user_inputs_json, true);

答案 1 :(得分:0)

如果您需要始终将传入的JSON作为数组处理,请将第二个json_decode参数设置为true以强制它作为数组进行解码:

$user_inputs = json_decode($user_inputs_json, 1);