Scala读取并解析JSON

时间:2016-10-21 08:54:05

标签: java json scala

我是Scala的新手。我有一个名为scala_input.json的JSON文件,其中包含两个项目:

{
 "edges_file": "/path/edges.json.gz", 
 "seed_file": "/path/seed.json.gz"
}

我希望打开该文件,从该文件中解析并归属两个val。我试过了:

val input_file = "/path/scala_input.json"
val json_data = JSON.parseFull(input_file)
val edges_file = json_data.get.asInstanceOf[Map[String, Any]]("edges_file").asInstanceOf[String]
val seeds_file = json_data.get.asInstanceOf[Map[String, Any]]("seed_file").asInstanceOf[String]]

然而,这会返回java.util.NoSuchElementException: None.get。我还没有定义什么? json_datainput_file是正确的,我确信edges_fileseed_file存在。

2 个答案:

答案 0 :(得分:2)

JSON.parseFull需要一个JSON字符串,而不是包含此类字符串的文件的路径。所以 - 你应该首先加载文件,然后解析它:

val input_file = "./scala_input.json"
val json_content = scala.io.Source.fromFile(input_file).mkString
val json_data = JSON.parseFull(json_content)
// go on from there...

答案 1 :(得分:0)

os-libupickle是读取和解析JSON数据的更好选择。

val jsonString = os.read(os.pwd/"src"/"test"/"resources"/"scala_input.json")
val data = ujson.read(jsonString)
data("edges_file").str // "/path/edges.json.gz"
data("seed_file").str // "/path/seed.json.gz"

此代码比JSON.parseFull允许的代码更干净。 See here了解有关如何使用这些库的更多详细信息。