0

我有 2 位 scala 代码使用 json4s dsl 来生成 json 内容

val feastWithMenus = "Feast" ->
("target" -> "me") ~
  ("menus" -> List(
    ("first" -> "pate") ~
      ("mains" -> "beef") ~
      ("dessert" -> "ice-cream")
    ,
    ("first" -> "soup") ~
      ("mains" -> "omlette") ~
      ("dessert" -> "ice-cream")
  ))

  val feastNoMenu = "Feast" ->
("target" -> "me") ~ 
  ("menus" -> List.empty)

首先,我得到了我的期望:

{"Feast":{"target":"me","menus":[{"first":"pate","mains":"beef","dessert":"ice-cream"},     {"first":"soup","mains":"omlette","dessert":"ice-cream"}]}}

JObject(List((Feast,JObject(List((target,JString(me)), (menus,JArray(List(JObject(List((first,JString(pate)), (mains,JString(beef)), (dessert,JString(ice-cream)))), JObject(List((first,JString(soup)), (mains,JString(omlette)), (dessert,JString(ice-cream))))))))))))

但是对于空列表,我没有得到数组。相反,我得到

{"Feast":{"target":"me","menus":{}}}

JObject(List((Feast,JObject(List((target,JString(me)), (menus,JObject(List())))))))

注意在第一种情况下 menus 是 aJArray(List(Jobject而在第二种情况下是 aJObject(List()

这是设计使然吗?这目前用于测试,但我需要了解发生了什么,因为我的真实世界代码可能在许多地方都有空列表,并且接收者期待一个数组。

4

1 回答 1

2

您需要将 json4s 支持的显式类型传递给List构造函数才能使事情正常工作,否则Nothing将被推断。

于 2014-12-29T12:08:05.947 回答