【问题标题】:Parsing file with multiple JSON entries in Scala在 Scala 中解析具有多个 JSON 条目的文件
【发布时间】:2013-09-08 18:21:41
【问题描述】:

我有一个 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"} {"name":"Mary","number":"010","fav_colour":"yellow"} {"name":"Anna","number":"007","fav_colour":"pink"} {"name":"Dave","number":"003","fav_colour":"purple"}

"""

注意,我也试过用逗号分隔,但还是不行。

我只是想知道我是否必须编写一个函数来分隔每个 {bracketed entry} 或者我是否缺少 JSON 库的某些功能。到目前为止,当我传入我的文件时,它返回 None 而不是 Some(valid information)。

谢谢!

【问题讨论】:

  • 我很确定这不符合 JSON 文件的条件。
  • 我知道,我意识到我的文件是一堆 JSON 文件,每一行都有一个不同的文件。这是我第一次与他们合作。

标签: json scala


【解决方案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)))

http://www.scalakata.com/522bdbfeebb25c7f5d823c7d

【讨论】:

  • 我无法改变我所拥有的
【解决方案2】:

您使用的格式便于随时间收集信息,例如保留日志。

您可以通过重用解析器组合器来解析它!
例如:

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})

【讨论】:

    猜你喜欢
    • 2017-04-03
    • 1970-01-01
    • 2021-09-28
    • 2019-05-20
    • 2014-07-31
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 2019-07-07
    相关资源
    最近更新 更多