我目前正在从不同的数据源中提取一些指标并将它们存储在类型的映射中,Map[String,Any]
其中键对应于指标名称,值对应于指标值。我需要它或多或少是通用的,这意味着值类型可以是原始类型或原始类型列表。
我想将此映射序列化为 JSON 格式的字符串,为此我正在使用json4s
库。问题是这似乎不可能,我看不到可能的解决方案。我希望以下内容可以开箱即用:)
val myMap: Map[String,Any] = ... // extract metrics
val json = myMap.reduceLeft(_ ~ _) // create JSON of metrics
浏览我见过的源代码json4s
提供了隐式转换,以便将原始类型转换为JValue
's 并转换Traversable[A]/Map[String,A]/Option[A]
为JValue
's(在可用的隐式转换 from A
to的限制下JValue
,我理解它实际上意味着A
是原始类型)。该~
运算符提供了一种从 ' 中构造JObject
' 的好方法JField
,这只是 . 的类型别名(String, JValue)
。
在这种情况下,映射值类型为Any
,因此不会发生隐式转换,因此编译器会抛出以下错误:
value ~ is not a member of (String, Any)
[error] val json = r.reduceLeft(_ ~ _)
我想要完成的事情有解决方案吗?