在scala中使用fastjson将json字符串转为scala中的Class对象时出错 com.alibaba.fastjson.JSONException: syntax error, expec...

出错信息如下:

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对象,就正常了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硅谷工具人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值