php字符串转换json问题

谷雨hadoop 2014-10-20 09:56:09


<?php
$test = '{"FullName":"1234567","UserName":"test2"}';//测试数据成功
$test_json = json_decode($test);
error_log("test_json->FullName = ". $test_json->FullName);

//接受android post 请求的类似json格式的字符串数据({"FullName":"1234567","UserName":"test2"})
$obj = file_get_contents("php://input");
error_log(" obj1 == ".$obj);

$obj = "'".$obj ."'";
error_log(" obj2 == ".$obj);
$json = json_decode($obj);
//如果$obj不加单引号,则报类型转换异常,加了单引号之后json_decode($obj),又没有数据输出
//$obj = {"FullName":"1234567","UserName":"test2"};
//<b>Catchable fatal error</b>: Object of class stdClass could not be converted to string in <b>D:\Web\www\book\AppCart.php</b> on line <b>21</b><br />
// 用json_encode也不能$json->UserName输出数据
// $json = json_encode($obj);
// "{\\"FullName\\":\\"1234567\\",\\"UserName\\":\\"test2\\"}"
error_log(" json== " . $json);
$username = $json->UserName;
$fullname = $json->FullName;
error_log("+++++UserName++++" . $username);
error_log("++++++fullname==++++" . $fullname);

?>

以上是全部代码,为什么接受android post 请求的过来的json格式的字符串,获取不到数据,以下是输出日志:

[Mon Oct 20 21:36:10 2014] [error] [client 192.168.1.109] test_json->FullName = 1234567
[Mon Oct 20 21:36:10 2014] [error] [client 192.168.1.109] obj1 == {"FullName":"1234567","UserName":"test2"}
[Mon Oct 20 21:36:10 2014] [error] [client 192.168.1.109] obj2 == '{"FullName":"1234567","UserName":"test2"}'
[Mon Oct 20 21:36:10 2014] [error] [client 192.168.1.109] json==
[Mon Oct 20 21:36:10 2014] [error] [client 192.168.1.109] +++++UserName++++
[Mon Oct 20 21:36:10 2014] [error] [client 192.168.1.109] ++++++fullname==++++

...全文
366 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2014-10-21
  • 打赏
  • 举报
回复
把 error_log(" obj1 == ".$obj); 改为 error_log(" obj1 == ". var_dump($obj, 1)); 观察日志中显示的长度是否吻合
镰刀魔 2014-10-21
  • 打赏
  • 举报
回复
虽然记录在日志里面的是正确的内容,但很有可能是经过转义后的字符串。
zhaoyunpengo 2014-10-20
  • 打赏
  • 举报
回复
请你在Android那边拿到数据之后var_dump一下看他到底是个什么类型的数据。 看你的报错内容 我觉得直接拿到个对象 。。。你可以转成数组。。 其实你可以试试 这个。 $obj = file_get_contents("php://input"); json_decode(json_encode($obj))->UserName
傲雪星枫 2014-10-20
  • 打赏
  • 举报
回复
$obj = "'".$obj ."'"; 你这句是什么意思呢?为什么要加双引? 把$obj输出看看有什么。 既然你的测试数据可以,那么输出$obj看看有什么比对一下。

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧