出错信息如下:
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对象,就正常了。