gpt4 book ai didi

php - 奇怪的行为: json_encode() producing invalid json dependent on input

转载 作者:行者123 更新时间:2023-12-03 07:59:27 26 4
gpt4 key购买 nike

今天,我不得不处理php的 json_encode()的某些veerery奇怪的行为,我无处可读。

简而言之:

  • 提取一行数据库
  • 构建一个 stdClass -object并将一些数据存储在其中
  • 使用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";

    没有产生错误。

    现在,我只是更改了数据库表的列的顺序。但是我想知道,这个从未见过的错误来自何处,并最终进行报告。

    该错误仅出现在运行PHP 5.3.6的Debian-VM上。另一个运行PHP 5.3.3的VM可以生成正确的JSON,就像Mac OS X Lion的集成Web服务器运行PHP 5.3.8一样。

    我的问题

    有人也遇到这个问题吗?

    来自德国的问候!

    原始代码
    $obj = new stdClass();
    $obj->Id = '35';
    $obj->EventsCategories_Id = '8';
    $obj->Name = 'Blubber';
    $obj->OrderValue = '2';
    var_dump($obj);
    json_encode($obj);

    最佳答案

    我不知道这是否会有所帮助,但是运行以下代码会产生不同的结果吗?

    $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);

    我认为要问的相关问题是:
  • 一个内部PHP问题(可能,但不太可能)
  • 由某些环境问题引起的问题(冲突的库?)
  • 缺少的配置选项

  • 我非常怀疑您做错了什么(我的意思是,这是一个简单的用例,您的代码完全没有错),但是也许您可以尝试其他几件事...

    例如,尝试将第二个参数附加到 json_encode函数:
    echo json_encode($obj, JSON_FORCE_OBJECT);
    您能否发布这两个简短实验的结果?确实,这个问题很奇怪。我正在运行PHP 5.3.1,它会根据您的示例生成语法正确的JSON-没有问题要报告。

    关于php - 奇怪的行为: json_encode() producing invalid json dependent on input,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9609344/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com