【问题标题】:JSON and Scala parserJSON 和 Scala 解析器
【发布时间】:2018-06-15 10:21:50
【问题描述】:

我正在尝试解析以下代码 json 字符串值:

val map1 = mapper.readValue("""{"test":"113123","myList":{"test2":"321323","test3":"11122"}}""", classOf[Map[String,Any]])
System.out.println(map1)

为此我得到这样的输出:

Map(test -> 113123, myList -> Map(test2 -> 321323, test3 -> 11122))

但我的预期输出是:

Map(test -> 113123, myList -> Some(Map(test2 -> 321323, test3 -> 11122)))

需要帮助来解决这个问题。谢谢

【问题讨论】:

  • 你的映射器是什么样的?
  • 我猜是这个……studytrails.com/java/json/java-jackson-data-binding……对吗?
  • com.fasterxml.jackson.databind.ObjectMapper 类的一个实例
  • @joelb,它将是动态 JSON,我们这里没有使用任何类型的 POJO 类

标签: json scala jackson-databind


【解决方案1】:

如果您在地图中寻找Some() 作为值,大概在某些情况下您会期望None。而不是 Option 内置到您的地图中(可能与 classOf(Map[String, Option[Any]])),我希望在尝试访问地图中的值时返回 Option,如 Map.get("myList"),否则我我不确定你如何定义你不想要Map("cat" -> None, "dog" -> None, "fish" -> None) 等。

简而言之,在我看来Some 的位置很奇怪

【讨论】:

  • 是的,如果 map 包含值,那么我们将使用 Some 前缀,否则不会有任何 some 前缀,如下所示 Map(test -> 113123, "cat" -> None, myList -> Some(地图(test2 -> 321323, test3 -> 11122)))
  • 你打算如何区分例如test->113123myList -> Some(Map(...))。也就是说,一个使用 Option,另一个不使用。怎么会?
  • 如果是 None 或 single (k.v) 表示没有选项。如果它是嵌套的 (k.v) 表示 Some(Map(...))
  • 我不会这样做(不是说我是对的),但是如果你愿意,我只能想你描述的那样做一个类型T,然后把它放进去classOf[Map[String,T]]。我不知道那种类型会是什么
  • 你能分享更多关于这个解决方案的信息吗?
猜你喜欢
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 2013-11-23
  • 2015-03-11
  • 2021-09-28
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
相关资源
最近更新 更多