[alibaba/fastjson]序列化scala的immutable.Map异常

2025-11-03 786 views
2

使用fastjson序列化map,代码如下

val map=Map("test1" -> "aa")
val result=com.alibaba.fastjson.JSON.toJSONString(map,Array.empty[SerializerFeature]:_*)
println(result)

输出结果为: {"empty":false,"traversableAgain":true}

回答

2

使用scala.util.parsing.json可以得到预期输出

 val map=Map("test1" -> "aa")
  val result=scala.util.parsing.json.JSONObject.apply(map)
println(result)

输出结果为: {"test1" : "aa"} 想请教下fastjson序列化异常的原因

1

@Robert114 我也遇到了同样的问题。请问该如何解决?

7

我没解决这个问题。fastjson 是为 Java 设计的,也许它在 Scala 中有特殊的用法。

5

@junjun-yang @huangyunbo 您可以使用jsoniter-scala来实现这一点,它在解析和序列化方面具有相同或更高的效率,并且支持 Scala case 类和集合,直到 fastjson 正式支持 Scala 为止。

7

好的,谢谢你的推荐。

5

异常的原因如下: 假设val map = Map("key" -> 1) map的className为: scala.collection.immutable.Map$Map1 scala在获取当前对象匹配的ObjectSerializer时, 会根据当前类的className跟已知对象类型(比如Integer, Map, Array等) 比较, 判断传入的对象类型是否跟已知类型相同, 或者是否是对应的子类等。 Scala中的Map类型在匹配完所有已知类型后都没有发现对应的ObjectSerializer类, 最终使用了默认的JavaBeanSerializer(com\alibaba\fastjson\serializer\SerializeConfig.class$getObjectWriter), 导致错误

0

没有解决办法吗. 就用fastjson的话