有谁对ecshop的json解析机制比较了解,帮看一下这个为什么报错了
2016-07-07 15:01 来源:www.chinab4c.com 作者:ecshop专家
有谁对ecshop的json解析机制比较了解,帮看一下这个为什么报错了 代码: <?php define('IN_ECS', true); require(dirname(__FILE__) . '/includes/init.php'); include_once('includes/cls_json.php'); $json = new Json(); $goods = $json->decode('{"spec":[], "goods_id":4154, "sale_user_id":3, "number":1, "parent":0}'); var_dump($goods); ?> 报错: Fatal error: Bad string at offset 12: {"spec":[], "goods_id":4154, "sale_user_id":3, "number":1, "parent":0} in E:\workspace\demo\includes\cls_json.php on line 186 自已解决了这个问题: 是cls_json.php的一个bug: 出问题的原因是json串中用逗号分开的各个部分不能有空格,要是有空格就无法解析了,形如: '{"spec":[],"goods_id":4154,"sale_user_id":3,"number":1,"parent":0}' 就可以解析,但是这样的 '{"spec":[], "goods_id":4154,"sale_user_id":3, "number":1, "parent":0}' 就无法解析了 解决办法是: 方法str中加上过滤掉空格的处理就可以了 /** * handles strings * * @accessprivate * * @returnvoid */ function str() { $i = ''; $s = ''; $t = ''; $u = ''; while($this->ch ==" ") $this->next(); if ($this->ch == '"') { while ($this->next() !== null) { if ($this->ch == '"') { $this->next(); return $s; } elseif ($this->ch == '\\') { switch ($this->next()) { case 'b': $s .= '\b'; break; case 'f': $s .= '\f'; break; case 'n': $s .= '\n'; break; case 'r': $s .= '\r'; break; case 't': $s .= '\t'; break; case 'u': $u = 0; for ($i = 0; $i < 4; $i++) { $t = (integer) sprintf('%01c', hexdec($this->next())); if (!is_numeric($t)) { break 2; } $u = $u * 16 + $t; } $s .= chr($u); break; case '\'': $s .= '\''; break; default: $s .= $this->ch; } } else { $s .= $this->ch; } } } $this->error('Bad string'); } HEHE,这也算官方的一个小bug吧 |
回答:
你参数那儿好像有毛病啊 |
不是参数的问题,自已解决了,可能是cls_json.php的一个bug: 出问题的原因是json串中用逗号分开的各个部分不能有空格,要是有空格就无法解析了,形如: '{"spec":[],"goods_id":4154,"sale_user_id":3,"number":1,"parent":0}' 就可以解析,但是这样的 '{"spec":[], "goods_id":4154,"sale_user_id":3, "number":1, "parent":0}' 就无法解析了 楼上两位说是传参的问题,至于传参, $json->decode($str,$type),是两个参数,第一个是要解析的字符串,第二个是解析后以数据类型,一般不用传第二个参数。 |
你的程序不是 2.7 吧! |
是2.7.0的,但定制功能了 |
谁能帮帮忙啊,我也是这个问题,具体步骤啊。。 |
既然是json,就要按照json的规范编码和解析字符串。注意:键值对之间用逗号分隔,没有允许使用空格! 都提示bad string 了,说明是你给他的json_decode()的参数不符合json规范的字符串! |
最近更新
常用插件
- ecshop二次开发详细页面生
插件介绍: ECSHOP系统,在很多时候,很多商品没有人购买,不但购买的人...
- ecshop分类批量扩展插件
ecshop分类批量扩展插件,这个插件是ecshop插件里面比较核心的插件。我们...
- ecshop二次商品订购人信息
ecshop二次商品订购人信息填写插件,有时候给朋友送花,或者是送礼品的...
- ecshop2.7.1打印发货单插件
ecshop2.7.1打印发货单插件介绍:ecshop2.7.1和以前的ecshop版本不一样,ecs...
- ecshop商品分类名称增加样
ecshop插件介绍:本插件可以方便在后台管理,为ecshop商品分类名称增加样...
ecshop热门问答
ecshop热门资料
ecshop弱智
ecshop空间图片
ecshoprate
ecshop短信接口
ecshop零数
ecshop559
ecshop数据库结构说明
ecshop预付
ecshop库存查询
ecshop面谈
ecshop诚心
ecshop是否支持货到付款
ecshopIP地址库
ecshopPannel
ecshop店铺管理
ecshop跟贴
ecshopJmail
ecshop积分重复赠送
ecshop上传不了
ecshop调用
ecshopGalaxy
ecshop微软雅黑
ecshop牵涉
ecshop帮助中心
ecshop官网
ecshop语言管理
uchome组
ecshopinsert
ecshop分类页产品数量
ecshopgoods_sn