我需要从消息中提取字段值:
{
"data": {
"code": "404",
...
}
}JSONPath表达式存储在一个变量中:
val path = "/data/code"我使用json4s来操作JSON。
从文档中,可以使用DSL实现这一点:
val json = parse(message)
val code = json \ "data" \ "code"它可以工作,但是很明显,JSONPath表达式应该是硬编码的。有任何方法来计算作为字符串存储的表达式吗?类似于:
val code = json.evaluateJSONPath(path)发布于 2017-07-21 14:34:44
假设json路径是以逗号分隔的字符串格式提供的,那么下面的内容就可以了。
import org.json4s._
import org.json4s.native.JsonMethods._
val json = parse(""" { "data": { "code": "404", "foo": "bar" } } """)
val path = "data,code" // json path in string
path.split(',').foldLeft(json)({ case (acc, node) => acc \ node })编辑:添加一个隐式类以简化访问
implicit class JsonHelper(json: JValue) {
def customExtract[T](path: String)(implicit formats: Formats, mf: Manifest[T]) = {
path.split(',').foldLeft(json)({ case (acc: JValue, node: String) => acc \ node }).extract[T]
}
}
json.customExtract[String]("data,code")
res23: String = "404"发布于 2017-07-21 15:04:35
如何使用高阶函数映射提取命令,如:
val extractCodeFunc = (j: JValue) => j \ "data" \ "code"提取json
val res = extractCodeFunc.apply(json)https://stackoverflow.com/questions/45240109
复制相似问题