【发布时间】:2018-04-11 15:24:07
【问题描述】:
Api 请求 返回一个 Json 字符串,如下所示。我一直在尝试在 Scala 中解析,将 "name" 字段添加到列表中,然后使用另一个列表过滤此列表。 API 来自第三方,因此无法修改格式。
示例列表(此处的值中有 2 个条目,但最多可以有 300 个):
{
"size": 20,
"values": [{
"name": "mullock",
"upstatus": "Green",
"details": {
"key": "rupture farms",
"server": "mudos",
"owner": "magog_cartel",
"type": "NORMAL",
"links": {
"self": [{
"address": "https://mudos.com:port/access"
}]
}
}
},
{
"name": "tassadar",
"upstatus": "Orange",
"details": {
"key": "archon",
"server": "protoss",
"owner": "aspp67",
"type": "NORMAL",
"links": {
"self": [{
"address": "https://aiur.com:port/access"
}]
}
}
}
],
"limit": 100
}
我尝试使用 jackson 和一些在应用程序的其他部分中使用的建议函数(如下)来解组字符串,但我不完全理解这一点。
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
object Json {
/* Json/Scala translation utilities
*/
val mapper = {
val _mapper = new ObjectMapper() with ScalaObjectMapper
_mapper.registerModule(DefaultScalaModule)
_mapper
}
def dump(obj: Any): String = {
mapper.writeValueAsString(obj)
}
def dumpObj(fields: (Any, Any)*): String = {
dump(fields.toMap)
}
def read[T: Manifest](content: String): T = {
mapper.readValue(content, mapper.constructType[T])
}
def readObj(content: String): Map[Any, Any] = {
return read[Map[Any, Any]](content)
}
}
- 如何访问对象 Map(Any, Any) 中的嵌套元素?
- 这是反序列化 JSON 字符串的正确方法吗?
非常感谢任何帮助!
【问题讨论】:
-
我在问如何访问数组类型 ANY 中的嵌套元素,或者如何从输入 Json 字符串中正确展平嵌套混合类型数组
-
请更新答案。但想法是你不能 -
Any可以是任何类型,包括字符串、int、float、boolean 或自定义对象。您需要将其反序列化为某个特定的类才能访问嵌套结构。我在评论中概述的所有三个库都允许这样做。
标签: json scala unmarshalling