我使用JacksMapper
将JSON字符串解析为Map[String,String]
:
def parseJSON(line: String): Map[String, String] = {
JacksMapper.readValue[Map[String, String]](line)
}
对于某些JSON字符串,它会抛出错误:
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_ARRAY token
特别是它出现在这个字符串中:
{" ID":" 123""名称":"访问""类别":& #34; ABC"" x_ids":[" 220"]}
我认为问题出在"x_ids":["220"]
,而我希望结果为Map[String,String]
。所以,在这种情况下,我有兴趣将数组转换为像"x_ids"->"220,230"
这样的字符串。如何灵活地进行,以便解决方案适用于某些情况下可能是阵列的其他可能字段?
修改 在我的情况下,我从来没有复杂的数组应该用静态类解析。只有数字或字符串数组。
答案 0 :(得分:1)
你可以分两步完成:
这可能会产生类似的结果:
def parseJSON(line: String): Map[String, String] = {
JacksMapper.readValue[Map[String, Any]](line)
.mapValues {
case array: Iterable[Any] => array.mkString(", ")
case anyValue: Any => anyValue.toString
}
}
答案 1 :(得分:0)
这是因为您声称所有值都是System.Threading.Thread.CurrentThread.CurrentCulture
s,但String
是JSON数组,而不是JSON字符串。两种方法:
x_ids
,在这种情况下,您会获得java.lang.Object
和String
s List
在这种情况下,带有一个(且只有一个!)元素的JSON数组可以“展开”以匹配预期类型 - 不是100%确定它在这里工作,但理论上应该