Scala读取和解析JSON

3

我是Scala的新手。我有一个JSON文件,名为scala_input.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存在。

1
你能指定一下你导入的JSON包吗?我遇到了类似的问题。谢谢。 - Z. Simon
2个回答

6

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...

我需要导入哪个库才能使用JSON.parseFull? - Geoff Langenderfer
1
我相信所需的导入是 import scala.util.parsing.json._,它是 Scala 库的一部分。 - Tzach Zohar

5

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允许的代码更加简洁。详情请参见此处,了解如何使用这些库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接