我有一个 JSON 文件,我试图使用Scala解析。我已经想出如何使用Scala JSON 解析库来解析这种格式的1个条目:
{"name":"John","number":"005","fav_colour":"blue"}
这是有效的代码:
val result = JSON.parseFull("""{"name":"John","number":"005","fav_colour":"blue"}""")
result match {
case Some(e) => println(e)
case None => println("Failed.")
}
这会打印Map(name -> John, number -> 005, fav_colour -> blue)
代码基于以下内容:https://gist.github.com/takezoe/1540223
但是,我正在使用这样的文件:
“”“{”name“:”John“,”number“:”005“,”fav_colour“:”blue“} { “名”: “玛丽”, “数字”: “010”, “fav_colour”: “黄”} { “名”: “安娜”, “数字”: “007”, “fav_colour”: “粉红色”} { “名称”: “戴夫”, “号码”: “003”, “fav_colour”: “紫色”}
“”“
请注意,我也尝试用逗号分隔,但仍然没有用。
我只是想知道是否必须编写一个函数来分隔每个{括号内的条目},或者是否存在我缺少的 JSON 库的某些功能。到目前为止,当我传入我的文件时,它返回None而不是Some(有效信息)。
谢谢!
答案 0 :(得分:1)
您没有有效的Json文件。这是有效的:
[
{"name":"John","number":"005","fav_colour":"blue"},
{"name":"Mary","number":"010","fav_colour":"yellow"},
{"name":"Anna","number":"007","fav_colour":"pink"},
{"name":"Dave","number":"003","fav_colour":"purple"}
]
结果:
Some(List(Map(name -> John, number -> 005, fav_colour -> blue), Map(name -> Mary, number -> 010, fav_colour -> yellow), Map(name -> Anna, number -> 007, fav_colour -> pink), Map(name -> Dave, number -> 003, fav_colour -> purple)))
答案 1 :(得分:1)
您使用的格式便于随时间收集信息,例如记录日志。
您可以通过重用解析器组合来解析它! 例如:
import scala.util.parsing.json.JSON
val parseResult = JSON.rep1(JSON.root)(new JSON.lexical.Scanner("{\"a\": 1} {\"b\": 2}"))
parseResult match {case JSON.Success (result, _) => result; case _ => Nil}
返回
List({"a" : 1.0}, {"b" : 2.0})