簡體   English   中英

傑克遜連載Scala集

[英]Jackson Serialise a Scala Set

我有一個與fasterxml jackson有關的問題,涉及在序列化帶有集的scala類Genre作為字段Set [Type]之一的情況下,其中Type是具有單個參數的案例類

class Type(val value: String) extends AnyVal
case class Genre(name: String, types: Set[Type])

當我嘗試序列化它時,它會給出類似

{"genre":{"name":"xxxxxx","types":[{"value":"aaaaa"}, {"value":"bbbb"}, {"value":"ccccc"}]}}

但是我不希望生成的json包含該類的參數名稱,並且它應該僅包含參數值。 它應該看起來像是逗號分隔的值[“ aaaaa”,“ bbbb”,“ ccccc”] ,例如

{"genre":{"name":"xxxxxx","types":["aaaaa","bbbb","ccccc"]}}

有沒有辦法使用傑克遜序列化一組僅包含值而不是參數名稱的類?

我的映射器看起來像這樣

  private val mapper = new ObjectMapper
  mapper.registerModule(DefaultScalaModule)

提前致謝 !

它應該看起來像是逗號分隔的值[“ aaaaa”,“ bbbb”,“ ccccc”]

那是Set[String] ,但是您擁有的是Set[Type] 傑克遜(Jackson)確實在做應該做的事情。 您需要將課程簽名更改為:

case class Genre(name: String, types: Set[String])

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule

object TestObject {
  def main(args: Array[String]): Unit = {
    val mapper = new ObjectMapper()
    mapper.registerModule(DefaultScalaModule)

    val genre = Genre("xxxxxx", Set(new Type("aaaaa"), new Type("bbbb"), new Type("ccccc")))
    println("Genre:        " + mapper.writeValueAsString(genre))

    val anotherGenre = AnotherGenre("xxxxxx", Set("aaaaa", "bbbb", "ccccc"))
    println("AnotherGenre: " + mapper.writeValueAsString(anotherGenre))

  }
}

class Type(val value: String) extends AnyVal

case class Genre(name: String, types: Set[Type])

case class AnotherGenre(name: String, types: Set[String])

輸出:

Genre:        {"name":"xxxxxx","types":[{"value":"aaaaa"},{"value":"bbbb"},{"value":"ccccc"}]}
AnotherGenre: {"name":"xxxxxx","types":["aaaaa","bbbb","ccccc"]}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM