【问题标题】:cjson decoding error on identical code相同代码上的cjson解码错误
【发布时间】:2016-01-21 14:12:03
【问题描述】:

尝试使用 PHP 发布 JSON 数据,但显示此文本 - {"message":"cjson 解码错误","code":500,"error":true}

这是通过浏览器提交的数据(使用 Live HTTP Headers 插件获取):

{"nodes":[{"id":"fbm:n#1445506477266","type":"bookmark","parentId":"ROOT","re​​fId":null,"href":"" ,"text":"[新书签]","desc":"","tags":"","cr":1445506584}],"revision":1,"token":"MTQ0NTUwNjQ3Ny4yOS1O9m2hacygwtDuox8/fHtN/efVUtNC9RvMlQbPAS +gwg=="}

这是我的数据:

json_encode(array("nodes"=>array(array("id"=>"fbm:n#1445506477266", "type"=>"bookmark", "parentId"=>"ROOT","refId"=>null,"href"=>"","text"=>"[New Bookmark]","desc"=>"","tags"=>"","cr"=>1445506584)), "revision"=>1,"token"=>"MTQ0NTUwNjQ3Ny4yOS1O9m2hacygwtDuox8/fHtN/efVUtNC9RvMlQbPAS+gwg=="))

当我打印我的数据时,我得到的结果完全相同(除了 json_encode 函数用 \ 转义 /,但我在 JSON 中读取它并不重要)。所以这是我的数据的输出

{"nodes":[{"id":"fbm:n#1445506477266","type":"bookmark","parentId":"ROOT","re​​fId":null,"href":"" ,"text":"[新书签]","desc":"","tags":"","cr":1445506584}],"revision":1,"token":"MTQ0NTUwNjQ3Ny4yOS1O9m2hacygwtDuox8/fHtN/efVUtNC9RvMlQbPAS +gwg=="}

如您所见,一切都是相同的(除了 )。甚至使用 Beyond Compare 工具来比较这些代码的每个字符,没有区别。

为什么代码仍然返回解码错误?也尝试使用 JSON_UNESCAPED_SLASHES(所以没有添加斜杠),没有结果。

【问题讨论】:

    标签: php json


    【解决方案1】:

    您的令牌似乎不是真的。

    您可以使用此代码进行检查;

    $a = json_encode(array("nodes"=>array(array("id"=>"fbm:n#1445506477266", "type"=>"bookmark", "parentId"=>"ROOT","refId"=>null,"href"=>"","text"=>"[New Bookmark]","desc"=>"","tags"=>"","cr"=>1445506584)), "revision"=>1,"token"=>"MTQ0NTUwNjQ3Ny4yOS1O9m2hacygwtDuox8/fHtN/efVUtNC9RvMlQbPAS+gwg=="));
    
    print_r($a);
    
    echo '<br>';
    
    echo '{"nodes":[{"id":"fbm:n#1445506477266","type":"bookmark","parentId":"ROOT","refId":null,"href":"","text":"[New Bookmark]","desc":"","tags":"","cr":1445506584}],"revision":1,"token":"MTQ0NTUwNjQ3Ny4yOS1O9m2hacygwtDuox8/fHtN/efVUtNC9RvMlQbPAS+gwg=="}';
    

    编辑:JSON_UNESCAPED_SLASHES 对我有用。

    $a = array("nodes"=>array(array("id"=>"fbm:n#1445506477266", "type"=>"bookmark", "parentId"=>"ROOT","refId"=>null,"href"=>"","text"=>"[New Bookmark]","desc"=>"","tags"=>"","cr"=>1445506584)), "revision"=>1,"token"=>"MTQ0NTUwNjQ3Ny4yOS1O9m2hacygwtDuox8/fHtN/efVUtNC9RvMlQbPAS+gwg==");
    json_encode($a,JSON_UNESCAPED_SLASHES);
    
    print_r($a);
    echo '<br><br><br>';
    echo '{"nodes":[{"id":"fbm:n#1445506477266","type":"bookmark","parentId":"ROOT","refId":null,"href":"","text":"[New Bookmark]","desc":"","tags":"","cr":1445506584}],"revision":1,"token":"MTQ0NTUwNjQ3Ny4yOS1O9m2hacygwtDuox8/fHtN/efVUtNC9RvMlQbPAS+gwg=="}';
    

    【讨论】:

    • 令牌不正确是什么意思?我启动了您的代码,唯一的区别是反斜杠(根据我的经验,这在 JSON 中并不重要)。正如我的问题中所解释的,我也没有成功地测试过没有反斜杠的情况。
    • 对不起,我现在看到了。使用 Json_unescaped_slashes ,似乎没问题。你还在收到解码错误吗?
    • 你可以在你的代码中尝试这个而不是 JSON_UNESCAPED_SLASHES 吗? str_replace('\\/', '/', json_encode($json_data));
    • 同理。与反斜杠无关,因为也有没有任何斜杠的token,总是显示同样的解码错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    相关资源
    最近更新 更多