代码之家  ›  专栏  ›  技术社区  ›  Stefan Gehrig

json的奇怪行为

  •  3
  • Stefan Gehrig  · 技术社区  · 14 年前

    以下面的JSON字符串为例(由一些ExtJS代码生成,但这无关紧要):

    [{"action":"Setting","method":"toggle","data":["welcome-home"],"type":"rpc","tid":2},{"action":"ContentExtFeFillout","method":"todo","data":[true,0,8,false],"type":"rpc","tid":3}]
    

    被发送到服务器作为 POST 通过请求和检索 $GLOBALS['HTTP_RAW_POST_DATA'] .

    json_decode($GLOBALS['HTTP_RAW_POST_DATA']);
    

    在我们的开发机器上( 5.2.10-2ubuntu6.4 苏霍辛贴片 0.9.7 )给出正确的 print_r() 输出:

    Array
    (
        [0] => stdClass Object
            (
                [action] => Setting
                [method] => toggle
                [data] => Array
                    (
                        [0] => welcome-home
                    )
    
                [type] => rpc
                [tid] => 2
            )
    
        [1] => stdClass Object
            (
                [action] => ContentExtFeFillout
                [method] => todo
                [data] => Array
                    (
                        [0] => 1
                        [1] => 0
                        [2] => 8
                        [3] =>
                    )
    
                [type] => rpc
                [tid] => 3
            )
    )
    

    在客户机的生产机器上运行相同的代码( 5.2.5 0.9.6.2 打印() 输出:

    Array
    (
        [0] => stdClass Object
            (
                [action] => Setting
                [method] => toggle
                [data] => Array
                    (
                        [0] => welcome-home
                    )
    
                [type] => rpc
            )
    
        [1] => 2
        [2] => stdClass Object
            (
                [action] => ContentExtFeFillout
                [method] => todo
                [data] => Array
                    (
                        [0] => 1
                        [1] => 0
                        [2] => 8
                        [3] => 
                    )
    
                [type] => rpc
            )
    
        [3] => 3
    )
    

    tid 属性,它显然已作为自己的值移到主数组中-这自然会破坏以下所有代码。

    我们还下载了一个Windows PHP版本 检查是否有错误 json_decode() 但是我们得到了正确的结果。

    json解码() 会不会导致这种奇怪的行为?

    我们现在完全不知所措。。。

    感谢你们所有人!

    顺致敬意,

    斯特凡

    2 回复  |  直到 13 年前
        1
  •  1
  •   Stefan Gehrig    14 年前

    他们的PHP安装(PHP、Zend Optimizer和/或Suhosin)中似乎有一个微妙的bug,这个bug已经用更新修复了。不过,还是挺奇怪的。

    感谢你们所有人!

    斯特凡

        2
  •  0
  •   zaf    14 年前

    你试过交换tid和type键吗?另外,使用一个硬编码变量来检查$GLOBALS['HTTP\u RAW\u POST\u DATA']是否有问题?

    $t1='[{"action":"Setting","method":"toggle","data":["welcome-home"],"type":"rpc","tid":2},{"action":"ContentExtFeFillout","method":"todo","data":[true,0,8,false],"tid":2,"type":"rpc"}]';
    print_r(json_decode($t1));