scala - 使用 Gson.tojson 转换嵌套列表
问题描述
我正在使用 Scala,但这也适用于 Java - Gson 似乎在转换嵌套在案例类/另一个对象内的 List 时遇到问题:
case class Candy(name:String, price:Double)
case class PersonCandy(name:String, age:Int, candyList:List[Candy])
val candies = List(Candy("M&M's", 1.99), Candy("Snickers", 1.59), Candy("Butterfinger", 2.33))
val personC = PersonCandy("Mark", 19, candies)
val pollAsJson = new Gson().toJson(personC)
REPL 显示结果pollAsJson
如下:
pollAsJson: String = {"name":"Mark","age":19,"candyList":{}}
我的解决方法可能是转换嵌套的 candyList,转换personC
然后,因为两者都只是字符串,手动将它们破解,但这并不理想。阅读博客和用法等似乎Gson可以很好地提取和转换嵌套的内部类,但是当Collection是嵌套类时,它似乎有问题。任何想法?
解决方案
该问题与案例类或嵌套无关,而是与 Gson 不正确支持的 Scala 集合类型有关。
为了证明这一点,让我们PersonCandy
改为
case class PersonCandy(name:String, age:Int, candyList: java.util.List[Candy])
并转换candies
为 Java 列表:
import scala.collection.JavaConverters._
val candies = List(/* same items */).asJava
JSON没问题:
{"name":"Mark","age":19,"candyList":[{"name":"M\u0026M\u0027s","price":1.99},{"name":"Snickers","price":1.59},{"name":"Butterfinger","price":2.33}]}
如果您尝试为原始candies
列表生成 JSON,它将生成:
{"head":{"name":"M\u0026M\u0027s","price":1.99},"tl":{}}
这反映了head :: tail
列表的结构。
Gson 是一个主要用于 Java 代码的库。
对于 Scala,有多种选择。我建议从这个问题的答案中尝试一些。
推荐阅读
- node.js - 我正在使用 Oauth 进行 google 身份验证并获取 client-id 和 client_secret 但它显示未定义
- android - Fetch 函数导致 SQL Transient 服务器行为异常
- flutter - 类似 Whatsapp 的搜索图标,点击时覆盖标题但在正文中 - 使用 Flutter
- excel - 从单元格引用转换为命名范围
- c++ - 为什么 mutiset 不像 set
- scala - scala中的复合类型与mixins
- linux - Visual Studio Code 通过脚本触发热部署
- python-3.x - Django Rest 框架过滤器的问题
- teamcity - GitVersion 在 TeamCity 构建中引发身份验证错误
- node.js - 无法在非异步问题中使用的等待错误