如何在PHP中使用json_decode / json_encode?

时间:2011-06-22 13:17:07

标签: php android mysql json

我在PHP中遇到问题。我试图从Android传递用户名/密码,并通过PHP检查MySQL中的值。在使用json_decodejson_encode时,json_decode有效,但json_encode不起作用。但是当我删除json_decodejson_encode时,我希望它们都能在我的程序中运行。

这是我的代码:

$a = $_POST['userpwd_value']; //Accesing the value from Android.

$b = json_decode($a); //Decoding android value using JSON.

$username = $b->{'username'}; //Assigning username from android to a variable.
$password = $b->{'password'}; //Assigning password from android to a variable.

echo $username.$password;

$check = mysql_query("select username,password from user where id=1");
$row = mysql_fetch_assoc($check);

//if($row['username']==$username && $row['password']==$password)
    $output[]=$row;
//else
    //$output[]=array("value"=>"false");
print(json_encode($output));

问题出在哪里?

3 个答案:

答案 0 :(得分:3)

如果变量内容未正确进行UTF-8排序,则

json_encode会失败。如果您的数据库使用另一个字符集,变量包含特殊字符,那么您应该在那里得到一个错误。 (提高error_reporting级别或查看json_last_error以查找)

您的特定代码的另一个问题是您首先输出其他内容:

 echo $username.$password;

这将使JSON输出整体无效。如果您有前导垃圾,您的浏览器将无法正确解码返回的变量。另外,请不要忘记使用header("Content-Type: application/json");

向您的结果发送相应的标头
  $b=json_decode($_POST['userpwd_value']); 
  $username=$b->{'username'}; 
  $password=$b->{'password'};

  $check = mysql_query("select username,password from user where id=1");
  $row = mysql_fetch_assoc($check);
  $row = array_map("utf8_encode", $row);

  if ($row['username']==$username && $row['password']==$password) {
      $output[] = $row;
  } else {
      $output[] = array("value"=>"false");
  }
  header("Content-Type: application/json");
  print(json_encode($output));

答案 1 :(得分:0)

我认为JSON编码数据中可能存在另一个级别($a)。您的echo语句是否显示正确的用户名和密码?如果没有,请将var_dump($b);放在您的后面 $b = json_decode($a);声明。

答案 2 :(得分:0)

将以下两行替换为以下内容。

您原来的行:

  $username=$b->{'username'};
  $password=$b->{'password'};

新行:

  $username=$b->username;
  $password=$b->password;

更换后,检查它是否正常工作。