我正在尝试将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 :(得分: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);