【问题标题】:What is the most straightforward way to parse JSON in Scala?在 Scala 中解析 JSON 最直接的方法是什么?
【发布时间】:2011-05-09 07:44:48
【问题描述】:

我正在使用 Scala 开发一个简单的 Web 应用程序。计划是从外部 API 获取 JSON 数据,并将其插入到模板中(不幸的是,获取 XML 中的数据不是一种选择)。

我尝试过使用 Twitter 的 scala-json 库,但无法正确编译(github 上的代码无法在 sbt 中更新,说标准项目 7.10 不可用,我没有工作还没有)。

lift-json 看起来令人印象深刻,但似乎比我现在需要的要复杂得多。

尝试导入我在 Java 中使用过的库 json,会导致各种神秘错误。这太糟糕了,因为我更喜欢 json 的简单明了。

我在内置 scala.util.parsing.json.JSON 方面取得了一些进展,但实际上我不知道如何访问这些元素。正如您可能已经注意到的,我对 Scala 有点陌生。如何访问 JSONObjects 的属性?

scala.util.parsing.json.JSON 有很多信息,但是有没有简单的教程说明如何在任何地方使用它?

我现在真的只对将 JSON 反序列化为 Ints、Strings、Maps 和 Lists 感兴趣。目前我不需要序列化对象或使反序列化的对象适合类。

谁能告诉我使用上述库之一的方法,或者帮助我设置一个可以满足我需求的 Java 库?

【问题讨论】:

    标签: json parsing serialization scala scala-2.8


    【解决方案1】:

    Lift JSON 提供了几种不同样式的反序列化 JSON。各有优缺点。

    val json = JsonParser.parse(""" { "foo": { "bar": 10 }} """)
    

    LINQ 风格的查询理解:

    scala> for { JField("bar", JInt(x)) <- json } yield x 
    
    res0: List[BigInt] = List(10)
    

    更多示例: http://github.com/lift/lift/blob/master/framework/lift-base/lift-json/src/test/scala/net/liftweb/json/QueryExamples.scala

    使用案例类提取值

    implicit val formats = net.liftweb.json.DefaultFormats 
    case class Foo(foo: Bar) 
    case class Bar(bar: Int) 
    json.extract[Foo] 
    

    更多示例:https://github.com/lift/lift/blob/master/framework/lift-base/lift-json/src/test/scala/net/liftweb/json/ExtractionExamples.scala

    XPath 样式

    scala> val JInt(x) = json \ "foo" \ "bar"
    
    x: BigInt = 10
    

    非类型安全值

    scala> json.values
    
    res0: Map((foo,Map(bar -> 10)))
    

    【讨论】:

      猜你喜欢
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多