今天我不得不处理php的 json_encode()的一些奇怪的行为,我无处可读。
使用json_encode()
对其进行编码$obj = new stdClass();
$obj->a = "foo";
$obj->b = "bar";
$obj->c = "doo";
$obj->d = "baa";
json_encode( $obj );
返回的JSON是错误的:第二个(最后一个,但只有这一个!)变量被合并到前一个的字符串值中。
例如它看起来像:
{"a": "foo", "b": "bar", "c": "doo', 'd': 'baa"}
^-------^
当然我已经将var_dumped()传递给json_encode()的对象......没有!一切都很好,完全符合预期。所有的变量都是正确的,所有的值都是字符串。
但是,这还不够。我发现,改变顺序,我将值存储到对象中解决了问题:
$obj->d = "baa";
$obj->c = "doo";
没有产生错误。
现在我只是改变了数据库表的列顺序。但我想知道,这个从未见过的bug来自哪里并最终报告它。
该错误仅出现在运行PHP 5.3.6的Debian-VM上。另一个运行PHP 5.3.3的虚拟机产生了正确的JSON,就像运行PHP 5.3.8的Mac OS X Lion集成网络服务器一样。
来自德国的问候!
$obj = new stdClass();
$obj->Id = '35';
$obj->EventsCategories_Id = '8';
$obj->Name = 'Blubber';
$obj->OrderValue = '2';
var_dump($obj);
json_encode($obj);
答案 0 :(得分:0)
我不知道这是否有帮助,但运行以下代码会产生任何不同的结果吗?
$obj = new stdClass();
$obj->Id = '35';
$obj->EventsCategories_Id = '8';
$obj->Name = 'Blubber';
$obj->OrderValue = '2';
// convert the stdClass object to an array
$obj = (array) $obj;
var_dump($obj);
json_encode($obj);
我认为要问的相关问题是:
虽然我非常怀疑你做错了什么(我的意思是,这是一个简单的用例,你的代码完全没有问题),也许你可以尝试其他一些东西......
例如,尝试将第二个参数附加到json_encode
函数:
echo json_encode($obj, JSON_FORCE_OBJECT);
你能发布这两个简短实验的结果吗?确实,这个问题很奇怪。我正在运行PHP 5.3.1并根据您的示例生成语法正确的JSON - 无需报告任何问题。