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

  • 相关阅读:
    【赵强老师】使用MongoDB的Web控制台
    【赵强老师】Oracle的PGA与数据库连接建立的过程
    【赵强老师】什么是Redis Cluster
    使用混合列压缩(HCC)创建表时,收集此表的统计信息可能会失败,会报ORA-03113,并且警报日志显示以下ORA-07445:
    2. dmdb 达梦数据库安装手册
    1.DM数据库参数说明
    IMPDP Hangs "WARNING:io_getevents timed out 600 sec"
    通过设置 events '1017 trace name context forever, level 3'; 找到帐号登录失败或者那个帐号被锁住
    oracle 12.2 pdb sqlplus 连接正常, sqldeveloper plsql 连接 hang住
    oracle 12c expdp 按用户导出 报ora-39170
  • 原文地址:https://www.cnblogs.com/30go/p/15890329.html
Copyright © 2020-2023  润新知