Javascript json_decode在OpenCart中返回json_ERROR_语法

Javascript json_decode在OpenCart中返回json_ERROR_语法,javascript,json,opencart,Javascript,Json,Opencart,我正在开发OpenCart shipping扩展的管理界面 我有一个表单有一个隐藏字段,这个字段由前端的JSON.stringifyrules填充 变量规则是一个多层对象 在控制器中,我可以读取$this->request->post['rules']变量,并且看起来是有效的JSON,但是JSON\u last\u error给了我JSON\u error\u语法 我检查JSON是否为UTF-8,mb_detect_编码返回ASCII 我有 已删除具有以下代码的无效字符 for ($i = 0;

我正在开发OpenCart shipping扩展的管理界面

我有一个表单有一个隐藏字段,这个字段由前端的JSON.stringifyrules填充

变量规则是一个多层对象

在控制器中,我可以读取$this->request->post['rules']变量,并且看起来是有效的JSON,但是JSON\u last\u error给了我JSON\u error\u语法

我检查JSON是否为UTF-8,mb_detect_编码返回ASCII 我有 已删除具有以下代码的无效字符

for ($i = 0; $i <= 31; ++$i) { 
    $rules = str_replace(chr($i), "", $rules); 
}
$rules = str_replace(chr(127), "", $rules);

if (0 === strpos(bin2hex($rules), 'efbbbf')) {
    $rules = substr($rules, 3);
 }
我不知道什么json_解码不起作用。谢谢你的帮助

更新:

我使用了strlen$rules,发现字符串比预期的长得多,似乎OpenCartor somthingelse正在添加JSON字符串中的字符串来代替


有人知道一个简单的方法来清理这个问题吗?

似乎OpenCart或其他什么东西通过破坏JSON将引号改为

在解码JSON之前,我添加了以下行,这解决了这个问题


$rules=str_替换“”,“”,$rules

执行var_dump$this->request->post['rules']。您不应该用str_replace之类的东西来破坏json字符串。这些函数不是unicode安全的。您已经用javascript和json对其进行了标记,但看起来您正在使用PHP。如果您试图使用JS解析JSON,则需要使用JSON.parsestr.JSON lint返回有效的JSON。。。可能在生成的文件中?您的示例是有效的JSON,JSON_decode可以在上面工作。请提供更多代码或json_解码失败的示例。Marc B,var_dump$this->request->post['rules']的输出是string337{IRIYL:{id:IRIYL,name:Free,high:99999,low:575,amount:0,type:1},YWHDM:{id:YWHDM,name:25%,high:575,low:0,amount:25,type:1}我意识到这个问题后没有添加stru replace util,我删除了no,因为它不能解决这个问题。
{"SMEVT":{"id":"SMEVT","name":"Free","high":99999,"low":575,"amount":0,"type":1},"VZWSR":{"id":"VZWSR","name":"25%","high":575,"low":0,"amount":25,"type":1}}