gpt4 book ai didi

scala - 使用 json4s 将 [String,Any] 映射到压缩 json 字符串

转载 作者:行者123 更新时间:2023-12-04 00:05:52 25 4
gpt4 key购买 nike

我目前正在从不同的数据源中提取一些指标并将它们存储在类型为 Map[String,Any] 的 map 中。其中键对应于指标名称,值对应于指标值。我需要它或多或少是通用的,这意味着值类型可以是原始类型或原始类型列表。

我想将此映射序列化为 JSON 格式的字符串,为此我正在使用 json4s图书馆。问题是这似乎不可能,我看不到可能的解决方案。我希望像下面这样的东西开箱即用:)

val myMap: Map[String,Any] = ...    // extract metrics
val json = myMap.reduceLeft(_ ~ _) // create JSON of metrics

导航 source code我见过 json4s提供隐式转换以将原始类型转换为 JValue 's 和也转换 Traversable[A]/Map[String,A]/Option[A]JValue的(在可用的限制下,从 AJValue 的隐式转换,我理解它实际上意味着 A 是原始类型)。 ~运算符提供了一种很好的构建方式 JObject已用完 JField 's,它只是 (String, JValue) 的类型别名.

在这种情况下, map 值类型是 Any ,因此不会发生隐式转换,因此编译器会抛出以下错误:
                    value ~ is not a member of (String, Any)
[error] val json = r.reduceLeft(_ ~ _)

我想要完成的事情有解决方案吗?

最佳答案

由于您实际上只是在寻找 myMap 的 JSON 字符串表示形式,您可以使用 Serialization直接对象。这是一个小例子(如果使用原生版本的 json4s 将导入更改为 org.json4s.native.Serialization ):

编辑 : 添加 formats隐含的

 import org.json4s.jackson.Serialization

implicit val formats = org.json4s.DefaultFormats

val m: Map[String, Any] = Map(
"name "-> "joe",
"children" -> List(
Map("name" -> "Mary", "age" -> 5),
Map("name" -> "Mazy", "age" -> 3)
)
)
// prints {"name ":"joe","children":[{"name":"Mary","age":5},{"name":"Mazy","age":3}]}
println(Serialization.write(m))

关于scala - 使用 json4s 将 [String,Any] 映射到压缩 json 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27842906/

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