fastjson中出现(syntax error, expect {, actual string, pos 0)错误原因分析
最近在开发过程中遇见一个fastjson巨坑,错误截图如下:
com.alibaba.fastjson.JSONEXception: syntax erron,expect {, actual string, pos 0, fastjson-version 1.2.83
at com.aLibaba.fastjson.parser.deserializer .JavaBeanDeserializer .deserialze(JavaBeanlesenializer.java:506) [fastjson-1.2.83.jar :na]at com.alibab.fastjson.parser .deserializer .JavaBeanDeserializer .parseRest(avaBeanbDesenialize .java:1624)[fastjson-1.2.83.jar :na)at com.alibaba.fastjson.panser .deserializer.FastjsonASNDeserializer_1_Task.deserialze(Unknown Sounce)~[na:naJ
at com.aLibaba.fastjson.parser .deserializer.JavaBeanDeserializer.deserialze(JaveBeanDesenializer.java:287)[fastison-1.2.83.jan-naJat com.alibaba .fastjson . parser .DefaultJSONParser .parseObject(DefaultJSONParser .java:705)~[fastjson-1.2.83. jar:naJ
at com.alibaba.fastjson.JSON.parseObject(JSON.java:394)~[fastjson-1.2.83.jar:na]
at com.alibaba.fastjson.JSON.parseObject(JSON.java:298)~[fastjson-1.2.83.jar:na]at com.alibaba.fastjson.JSON.parseObject(JSON.java:588) ~[fastjson-1.2.83.jar:na]
at com.itcast.cn.service.impl.RedisServiceImpl.poll(RedisSenviceImpl.java:33) ~[classes/:na]
at com.itcast.cn.controller.RedisOperateString .operateStrings(RedisopenateStpinc.java:60)[classes/:na] c1 interna,
calls>
at javax.servlet.http.HttpServlet.service(HttpSenvlet. java:634)[toncat-embed-core-9.0.21.jan :9.0.21] c intennal ca)
l>
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)~[tomcat-embed-core-9.0.21.jar:9.0.21]
at org.apache .catalina.core .ApplicationFilterChain.internalDoFilter(ApplicationFiltenChain.java:231) w[tomcat-embed-c.
re-9.0.21.jar: 9.0.21]
错误原因:
这个错误是指json字符串的格式不正确,导致解析失败
正常来说,我们用fastjson包内置的json解析方法是没问题的。例如JSON.toJsonString(),然后在转会对象用JSON.parseObject()这样没问题。但是,假设我们加入用redis操作字符串的set方法放入redis,在用get取出来的时候,就会出问题了。
解决办法:
第一种就是用String类提供的替换方法,替换掉和去掉前后的""。后在交给JSON.parseObject()转换
第二种就是调用JSON.parse()这个解析方法。解析后在交给JSON.parseObject()来转换。
总结:
开发过程中踩坑是必然,记录下来,希望下次遇见这个问题的小伙伴可以避坑。