1. 程式人生 > >fastjson中出現(syntax error, expect {, actual string, pos 0)錯誤原因分析

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的雜湊操作是不會導致字串變化的

總結:

      坑不可怕,怕的是沒坑。要是寫的軟體沒坑,才是最害怕的時候,加油踏坑。

程式人生,與君共勉~!