在scala中使用fastjson将json字符串转为scala中的Class对象时出错 com.alibaba.fastjson.JSONException: syntax error, expect {, actual float, pos 178, fieldName order_price, fastjson-version 1.2.68

 

出错信息如下:

com.alibaba.fastjson.JSONException: syntax error, expect {, actual float, pos 178, fieldName order_price, fastjson-version 1.2.68
    at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:503)
    at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:288)
    at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:284)
    at com.alibaba.fastjson.parser.deserializer.DefaultFieldDeserializer.parseField(DefaultFieldDeserializer.java:85)
    at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseField(JavaBeanDeserializer.java:1248)
    at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:866)
    at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseRest(JavaBeanDeserializer.java:1573)
    at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_1_OrderDetail.deserialze(Unknown Source)
    at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:284)
    at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:688)
    at com.alibaba.fastjson.JSON.parseObject(JSON.java:396)
    at com.alibaba.fastjson.JSON.parseObject(JSON.java:300)
    at com.alibaba.fastjson.JSON.parseObject(JSON.java:573)
    at com.king.app.dwm.OrderWideApp$.$anonfun$main$5(OrderWideApp.scala:71)

 

原始的字符串如下:

{"sku_num":"3","create_time":"2020-05-18 20:48:18","sku_id":21,"sku_name":"小米电视4A 70英寸 4K超高清 HDR 二级能效 2GB+16GB L70M5-4A 内置小爱 智能网络液晶平板教育电视","order_price":3299.00,"source_type":"2404","id":83729,"source_id":2,"order_id":30752}

order_price这里在java的程序中转成BigDecimal是没有问题的,但是在scala中定义类如下:

 

 

转换代码:

这里刚开始使用fastjson转换的,后来换成jackson时,才看出问题的原因:

//          val obj = mapper.readValue(x,classOf[OrderDetail])
          val obj = JSON.parseObject(x, classOf[OrderDetail])

使用fastjon直接报刚开始顶部出现的错误:

com.alibaba.fastjson.JSONException: syntax error, expect {, actual float, pos 178, fieldName order_price, fastjson-version 1.2.68

然后改成jackson就不报错误了,但是结果现实的信息令人匪夷所思,如下。

 

 

 

显然不是我要的结果,后来恍然大悟,fastjson中使用的是java中的BigDecimal,但是scala中的BigDecimal并不等于java中的BigDecimal。

找到问题,那么解决方法很简单,将scala的class类中的数据类型改为java中的BigDecimal即可。

 

 

 这样换回fastjson进行转成bean对象,就正常了。

 

posted @ 2022-02-13 20:50  硅谷工具人  阅读(784)  评论(0编辑  收藏  举报
成功之道,在于每个人生阶段都要有不同的目标,并且通过努力实现自己的目标,毕竟人生不过百年! 所有奋斗的意义在于为个人目标实现和提升家庭幸福,同时能推进社会进步和国家目标! 正如古人讲的正心诚意格物致知,修身齐家治国平天下。