无法在json_decode PHP中获取数据

时间:2014-09-17 01:43:30

标签: php

我有一个脚本,我试图从解码为数组的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的对象转换为字符串

2 个答案:

答案 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等方式访问。