scala JSON解析报错:JSONException: illegal getter

问题:
在json中存入一个Seq类型的对象,之后将json转为jsonstring,后期再次需要将jsonstring转为json对象,通过json对象获取Seq的duixiang,报如下错误:

    val json = new JSONObject()
    val a = Seq[Int](1,2,3,4,5)
    json.put("a",a)

    println("原始的json: " + json)
    val parse_a = json.getObject("a", classOf[Seq[Int]])
    println("通过原始的json解析的a :" + parse_a)

    println("--------json 转jsonstring 后再 parsejson---------")
    val jsonString = json.toJSONString
    println("json转为string后: " + jsonString)
    val obj = JSON.parseObject(jsonString)
    println("string再次解析为jsonObject: " + obj)
    val ints = obj.getObject("a", classOf[Seq[Int]])

报错信息:

com. alibaba. fastjson. JSONException: illegal getter
	at com. alibaba.fastjson.JSONObject.invoke(JSONObject.java:477)
	at com.sun.proxy. $Proxy29.hasDefiniteSize (Unknown Source)
	at scala.runtime.ScalaRunTime$.useOwnToString$1(ScalaRunTime.scala:298)
	at scala.runtime.ScaláRunTime$.scala$runtime$ScalaRunTime$$inner$1(ScalaRunTime.scala:325)
	at scala.runtime.ScalaRunTime$.string0f (ScalaRunTime.scala:337)
	at scala.runtime.ScalaRunTime$.replString0f(ScalaRunTime.scala:345)

问题原因:
通过打印信息发现,Seq在json中不是以数据本身存储的,而是通过解析之后存储在json中的,将json转string再转为json的时候,存储的数据发生了变化,导致数据解析异常。
在这里插入图片描述

解决方案:
尽量不向json中存储Seq类型的对象,可以将Seq的对象转为Array之后再存储到json中

    val json = new JSONObject()
    val a = Seq[Int](1,2,3,4,5)
    json.put("a",a.toArray)  //加上toArray

    println("原始的json: " + json)
    val parse_a = json.getObject("a", classOf[Array[Int]])
    println("通过原始的json解析的a :" + parse_a.toBuffer)

    println("--------json 转jsonstring 后再 parsejson---------")
    val jsonString = json.toJSONString
    println("json转为string后: " + jsonString)
    val obj = JSON.parseObject(jsonString)
    println("string再次解析为jsonObject: " + obj)
    val ints = obj.getObject("a", classOf[Array[Int]])
    println("解析后获取Seq: " + ints.toBuffer)

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值