如何将json字符串转换为scala映射?

Udi*_*hta 11 json scala jackson json4s

我有一个嵌套的json,其结构未定义.由于我从远程文件中读取,因此每次运行时都可能不同.我需要将这个json转换为类型的地图Map[String, Any].我试着研究json4s和jackson解析器,但它们似乎没有解决我的这个问题.有谁知道我怎么能做到这一点?

示例字符串:

{"body":{
    "method":"string",
    "events":"string",
    "clients":"string",
    "parameter":"string",
    "channel":"string",
    "metadata":{
        "meta1":"string",
        "meta2":"string",
        "meta3":"string"
    }
},
"timestamp":"string"}
Run Code Online (Sandbox Code Playgroud)

嵌套级别可以是任意的,也不是预定义的.
为了帮助解决这个问题:
我有一个Map [String,Any],我需要将它作为备份存储在一个文件中.所以我将它转换为json字符串并将其存储在一个文件中.现在,每当我获得新数据时,我需要从文件中获取json,再次将其转换为地图并执行一些计算.我无法将地图存储在内存中,因为如果我的工作失败,我会失去它.
我需要一个解决方案,将json字符串转换回我转换之前的原始地图.

lam*_*sta 14

我尝试使用json4s3.2.11 的以下方法,它的工作原理:

import org.json4s._
import org.json4s.jackson.JsonMethods._

//...
def jsonStrToMap(jsonStr: String): Map[String, Any] = {
  implicit val formats = org.json4s.DefaultFormats

  parse(jsonStr).extract[Map[String, Any]]
}
Run Code Online (Sandbox Code Playgroud)

也许你没有定义implicit val类型Formats?还需要注意的是,你不需要有一个implicit val每一个和每个方法中,只要它是容易找到的范畴.


小智 5

您可以使用以下代码将 JSON 字符串解析为 Map[String, Any]

val jsonMap = parse(jsonString).values.asInstanceOf[Map[String, Any]]
Run Code Online (Sandbox Code Playgroud)

但是,这不是类型安全的,因此在从地图中提取值时应谨慎使用。

  • “parse”的导入是什么? (2认同)