我有一个脚本,我试图从解码为数组的json字符串中获取值。我似乎无法访问数据。
$userData = json_decode($_GET['userData']);
echo $_GET['userData']; //<--- This line works fine and show the $_GET value
$id = $userData['hottsourceID']; //<-- This line errors
$coins = $userData['coins'];
echo $id;
echo $coins;
捕获致命错误:第11行的/home/hottsour/public_html/DeadRun/php/AppCreateDRAccount.php中无法将类stdClass的对象转换为字符串
答案 0 :(得分:2)
默认情况下,json_decode
不会创建关联数组,而是会创建对象
$data = json_decode('{"foo":"bar"}');
echo $data->foo;
// "bar"
如果您希望json_decode
使用关联数组,则可以将true
作为第二个参数传递
$data = json_decode('{"foo":"bar"}', true);
echo $data["foo"];
// "bar"
既然你知道这一点,你可以自己调整自己的解决方案
$userData = json_decode($_GET["userData"]);
$id = $userData->hottsourceID;
$coins = $userData->coins;
echo $id;
echo $coins;
其他提示
由于您正在解析用户输入,因此如果$_GET["userData"]
中的JSON无效,您可能希望抛出错误。如果解析失败,json_decode
将返回null
。
function decode($json) {
$data = json_decode($json);
if (is_null($data)) throw new Exception("Invalid JSON");
return $data;
}
try {
$userData = decode($_GET["userData"]);
$id = $userData->hottsourceID;
$coins = $userData->coins;
echo $id;
echo $coins;
}
catch (Exception $e) {
echo $e->getMessage();
}
答案 1 :(得分:0)
您应该使用array
作为第二个参数true
。没有true
参数$userData
是对象。因此,您无法使用$userData['index']
访问它。尝试
$userData = json_decode($_GET['userData'], true);
echo $_GET['userData'];
$id = $userData['hottsourceID'];
$coins = $userData['coins'];
echo $id;
echo $coins;
如果您未在true
中使用json_decode()
作为第二个参数,则可以$id = $userData->hottsourceID
,$coins = $userData->coins
等方式访问。