• 在scala中使用fastjson将json字符串转为scala中的Class对象时出错 com.alibaba.fastjson.JSONException: syntax error, expect {, actual float, pos 178, fieldName order_price, fastjsonversion 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对象,就正常了。

  • 相关阅读:
    简单封装DBUtils 和 pymysql 并实现简单的逆向工程生成class 类的py文件
    python学习第42、43天 HTMLCSS
    python学习第40天
    python学习第41天
    python学习第39天
    python学习第38天
    python学习第37天
    python学习第36天
    python学习第35天
    json转换为字典
  • 原文地址:https://www.cnblogs.com/30go/p/15890329.html
Copyright © 2020-2023  润新知