【问题标题】:Parsing JSON and iterating through the object in Scala解析 JSON 并遍历 Scala 中的对象
【发布时间】:2011-09-14 09:55:07
【问题描述】:

例如,给定以下 JSON 字符串:

[{"id": "user1", "password": "ps1"},{"id": "user2", "password": "ps2"},{"id": "user3", "password": "ps3"}]

在 Scala 中解析它并迭代每个结果并正确分析它的最佳和最优化的方法是什么?

谢谢。

【问题讨论】:

    标签: json parsing scala iteration


    【解决方案1】:

    使用 Lift-JSON:

    导入 net.liftweb.json.JsonParser._ 导入 net.liftweb.json.DefaultFormats val jsonString = //你的 jsonString.... 案例类凭据(id:字符串,密码:字符串) 隐式 val 格式 = DefaultFormats val credentials = parse(jsonString).extract[List[Credential]] 凭证 foreach { cred => println(cred.id + " " + cred.password) }

    一切都在这里解释:http://www.assembla.com/spaces/liftweb/wiki/JSON_Support

    【讨论】:

    • 很好的概念,将解析后的 JSON 对象提取到其他对象。例如,如果字段不匹配,或者 JSON 中的键与我的 Credential 对象中的键不匹配,我会得到一个正确的错误?
    • 是的,您可以在 parse 方法周围用 try catch 包围它。我喜欢它,因为只有当你的 JSonString 结构正确时它才会起作用
    【解决方案2】:

    我认为这篇博文对您的问题给出了全面的回答:http://debasishg.blogspot.com/2011/02/applicatives-for-composable-json.html 最后还有一个指向完整源代码库的链接。

    【讨论】:

    • 谢谢。非常完整的文章,非常适合我的需要。
    【解决方案3】:

    【讨论】:

    • 已经看过了,但我在 github repo 上找到了更多信息:https://github.com/lift/lift/blob/master/framework/lift-base/lift-json/README.md 通过使用 LINQ :)
    【解决方案4】:

    除了 lift-json 和上面提到的类型类方法,我知道 spray-json(PEG 解析器)和 twitter 的 json 库(基于 Programming in Scala 书中的代码)和 blueeyes 中的 json 库.还有其他的!

    我建议看一下Jackson,它是一个成熟且功能丰富的库,用于从 Java 中解析 JSON。

    Jackson 有一个 scala 的“官方”扩展:jackson-module-scala 和另一个 Jerkson

    【讨论】:

    • 您是否发现使用 jackson 比提升专有 JSON 解析算法更高效?
    • 我没有进行基准测试。但是,正确性和长期支持是重中之重,除了 Jackson 之外,还缺少一些库。但是,其他人的基准测试表明杰克逊的表现非常出色。
    【解决方案5】:

    框架中有一个 JSON 解析库,使用解析器组合器构建:http://www.scala-lang.org/api/current/scala/util/parsing/json/package.html

    Odersky 和 ​​Venners 将引导您完成它in their book,这是最后一章之一。

    【讨论】:

      猜你喜欢
      • 2019-08-16
      • 1970-01-01
      • 2020-08-21
      • 2020-12-10
      • 1970-01-01
      • 2014-04-03
      • 2018-05-25
      • 2020-12-15
      • 2015-09-21
      相关资源
      最近更新 更多