fastjson中出現(syntax error, expect {, actual string, pos 0)錯誤原因分析
前言:
近期在封裝fastjson後,加入了redis進行開發時遇到的巨坑:
com.alibaba.fastjson.JSONException: syntax error, expect {, actual string, pos 0, fastjson-version 1.2.47
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:451) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseRest(JavaBeanDeserializer.java:1283) at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_1_Users.deserialze(Unknown Source) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:267) at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:661) at com.alibaba.fastjson.JSON.parseObject(JSON.java:365) at com.alibaba.fastjson.JSON.parseObject(JSON.java:269) at com.alibaba.fastjson.JSON.parseObject(JSON.java:488)
錯誤原因:
這個錯誤是指json字串的格式不正確,導致解析失敗
正常來說,我們用fastjson包內建的json解析方法是沒問題的。例如JSON.toJsonString(),然後在轉會物件用JSON.parseObject()這樣沒問題。但是,假設我們加入用redis操作字串的set方法放入redis,在用get取出來的時候,就會出問題了。
舉個栗子:
執行結果:
什麼情況?加了轉義的\,導致解析失敗了。這就是報錯的原因。
當然,也是有解決辦法的
第一種就是用String類提供的替換方法,替換掉\和去掉前後的""。後在交給JSON.parseObject()轉換
第二種就是呼叫JSON.parse()這個解析方法。解析後在交給JSON.parseObject()來轉換。
順帶一提:
使用redis的雜湊操作是不會導致字串變化的
總結:
坑不可怕,怕的是沒坑。要是寫的軟體沒坑,才是最害怕的時候,加油踏坑。