gpt4 book ai didi

scala - Scala 中的 JSON 到 XML 并处理 Option() 结果

转载 作者:行者123 更新时间:2023-12-04 00:43:19 24 4
gpt4 key购买 nike

考虑以下来自 Scala 解释器的内容:

scala> JSON.parseFull("""{"name":"jack","greeting":"hello world"}""")
res6: Option[Any] = Some(Map(name -> jack, greeting -> hello world))

为什么在 Some() 事物中返回 Map?我该如何使用它?

我想将值放入 xml 模板中:

<test>
<name>name goes here</name>
<greeting>greeting goes here</greeting>
</test>

从 Some(thing) 中获取我的 map 并在 xml 中获取这些值的 Scala 方法是什么?

最佳答案

你可能应该使用这样的东西:

res6 collect { case x: Map[String, String] => renderXml(x) }

地点:

def renderXml(m: Map[String, String]) = 
<test><name>{m.get("name") getOrElse ""}</name></test>

collect Option[A] 上的方法采用 PartialFunction[A, B] 并且是 filter(通过谓词)和 的组合map(通过一个函数)。即:

opt collect pf
opt filter (a => pf isDefinedAt a) map (a => pf(a))

两者是等价的。当您有一个可选值时,您应该使用mapflatMapfiltercollect 等来转换程序中的选项,避免通过模式匹配或 get 方法提取选项的内容。您应该永远不要永远使用Option.get - 这是您做错了的典型标志。应该避免模式匹配,因为它代表了你程序中的一个分支,因此增加了圈复杂度——你可能希望这样做的唯一时间可能是为了性能


实际上,您遇到的问题是 parseJSON 方法的结果是一个 Option[Any](原因是它是一个 Option,大概是解析可能不会成功,Option 是处理 null 的一种比 null 更优雅的方式。

但我上面的代码的问题是 case x: Map[String, String] 由于类型删除而无法在运行时检查(即 scala 可以检查该选项是否包含 Map 但不是 Map 的类型参数都是 String。该代码会给您一个未检查警告。

关于scala - Scala 中的 JSON 到 XML 并处理 Option() 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9289647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com