我是斯卡拉新手。我有一个 JSON 文件,标题scala_input.json包含两项:
{
"edges_file": "/path/edges.json.gz",
"seed_file": "/path/seed.json.gz"
}
Run Code Online (Sandbox Code Playgroud)
我希望打开该文件,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]]
Run Code Online (Sandbox Code Playgroud)
然而,这又回来了java.util.NoSuchElementException: None.get。我还没有定义什么?json_data是input_file正确的,我确信并且edges_file存在seed_file。
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...
Run Code Online (Sandbox Code Playgroud)
os-lib和upickle是读取和解析 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"
Run Code Online (Sandbox Code Playgroud)
这段代码比允许的要干净得多JSON.parseFull。 有关如何使用这些库的更多详细信息,请参阅此处。
| 归档时间: |
|
| 查看次数: |
18780 次 |
| 最近记录: |