在 Scala 中解析 JSON 最直接的方法是什么?

2024-04-19

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

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

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

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

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

scala.util.parsing.json.JSON https://www.scala-lang.org/files/archive/api/2.10.x/#scala.util.parsing.json.JSON%24有很多信息,但是有关于如何在任何地方使用它的简单教程吗?

我目前只对将 JSON 反序列化为整数、字符串、映射和列表感兴趣。我目前不需要序列化对象或使反序列化的对象适合一个类。

任何人都可以向我指出使用上述库之一的方法,或者帮助我设置一个可以执行我想要的操作的 Java 库吗?


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 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 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)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Scala 中解析 JSON 最直接的方法是什么? 的相关文章

随机推荐

  • 使用 YouTube API 仅搜索 YouTube 上的音乐曲目

    我想使用 YouTube API v3 来仅搜索音乐曲目 没有猫或藤蔓或任何其他非音乐视频 我在 API Explorer 和文档中查找了有关此事的任何指示 但找不到任何有用的信息 如何只搜索音乐 是否还可以按发行年份或音乐流派过滤搜索结果
  • 如何使用邮递员查看返回的 html 呈现为网页

    我正在与邮递员一起测试 Flask 应用程序 我注意到 如屏幕截图所示 我收到了返回的 HTML 我知道过去我能够看到返回的 HTML 呈现为网页 但现在我不能 尽管单击各种按钮 如何将返回的 html 作为网页查看 In order to
  • 如何在 odoo 8 中导入 QOH

    我想通过 odoo 前端或使用后端 postgres 查询 更新 odoo 中的库存 我的股票价值保存在 csv 文件中 最后 我想批量更新现有数量 终于解决了 按照步骤操作即可 步骤1 1 gt 在仓库模块中选择产品 在列表视图中打开 2
  • 检测我们何时移回 Flutter 中的上一页

    我们从 Page1 移至 Page2 但现在从 Page2 移回 Page1 如下所示 Navigator of context pop 我们如何在 Page1 上检测到我们返回了 Navigator push context Materi
  • 使用 .NET 创建采用 JPEG 压缩的多页 TIFF

    有没有办法使用 NET 创建多页 TIFF 和 JPEG 压缩 我可以使用 LZW 压缩创建 TIFF 但文件非常大 好像EncoderValue枚举 我用来设置压缩 甚至没有合适的成员 你可以看看 gt gt 这篇文章 https sta
  • 这个查询可以安全地避免 SQL 注入吗?

    该脚本使用 PHP 编写 作为数据库 我使用 MySQL 这是脚本本身 unsafe variable GET user input sql sprintf INSERT INTO table column VALUES s unsafe
  • Drupal Studs 帮助我使用 form_alter 钩子(我就快到了)

    所以我认为我在概念上已经差不多了 但需要一些缺失的指导 目标是向普通用户注册表单添加一些字段 对其进行一些样式设置 然后将其提交并将额外的字段存储在表中 这是我到目前为止所拥有的 有人可以给我最后的推动并让我继续前进吗 请帮我 另外 如何应
  • Ionic2/Cordova typescript 项目中的 Moment.js 插件

    在我用 Typescript 编写的 Ionic 2 项目中 我使用 moment js 库 我使用代码片段导入它 import as moment from moment 这样做之后 在我的组件中我可以正常使用 moment 即 let
  • setlocale() 的用途是什么?

    我正在学习c 我发现了C 库的这个函数 setlocale http www cplusplus com reference clocale setlocale http www cplusplus com reference clocal
  • Caffe:如果内存中只能容纳一小部分,我该怎么办?

    我正在尝试训练一个非常大的模型 因此 我只能将非常小的批量大小放入 GPU 内存中 处理小批量的结果非常噪声梯度估计 https stackoverflow com a 33717093 1714410 我该怎么做才能避免这个问题 您可以更
  • PHP in_array() / array_search() 奇怪的行为

    我在使用 PHP 函数时发现了一些奇怪的行为in array 我有一个像这样的数组 arr TRUE some string something else 现在如果我想检查是否 test 显然不在数组中 但是in array 仍然返回 TR
  • 制作自定义 Android 闹钟以进行提醒

    我正在制作药物提醒应用程序 在该应用程序中 我添加了添加有关医生预约提醒的功能 在我的应用程序中 允许用户设置他 她自己的日期和时间 并且在该日期和时间应该触发警报 请帮助我 我已从此线程中参考 如何在Android中设置闹钟 https
  • 使用 mysql 选择 id 周围的行之前和之后

    我需要使用 mySQL 获取 ID 周围的 ID Example 表中ID 2 4 5 9 11 15 19 22 25 例如 我需要知道 ID 9 周围的 5 个 ID 查询应返回 4 5 9 11 15 Thanks 一个可能的解决方案
  • C++ 错误:“_mm_sin_ps”未在此范围内声明

    我正在尝试对将函数应用于数组的不同方法进行基准测试 why is mm sin ps在我的范围内不知道但是 mm sqrt ps is 我怎样才能让它知道 并且编译没有错误 include
  • 如何设置“react-native-drawer”在react-native中登录后仅对仪表板可见

    在反应本机中 我想禁用抽屉Login并启用抽屉 在Dashboard屏幕 我已经实施了 react native drawer with Navigator在路线之间导航 渲染方法如下 render
  • 如何使用触摸屏调用和关闭 Tkinter 制作的虚拟键盘

    我在打开和关闭使用 Tkinter 制作的虚拟键盘时遇到问题 我正在创建一个 GUI 用户将使用触摸屏显示器浏览它 并且用户需要输入条目 我试过了var name bind FocusIn callback 调用虚拟键盘并var name
  • 如何使用SVN、Branch?标签?树干? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我在谷歌上搜索了一下 找不到一个好的 初学者 指南SVN http en wikipedia org wiki Subversion
  • PostgreSQL 中的多个 DISTINCT ON 子句

    是否可以选择以下行DISTINCT ON一些单独的 独立的列集 假设我想要满足以下条件的所有行 明显于 name birth 明显于 name height 因此 在下表中 标有红叉的行不会有所不同 并指示失败的子句 name birth
  • 将具有开始 - 结束的行转换为具有 TimeIndex 的数据帧的性能问题

    我有一个大型数据集 其中每行代表某个时间间隔 开始和结束之间 的某种类型 认为是传感器 的值 它看起来像这样 start end type value 2015 01 01 2015 01 05 1 3 2015 01 06 2015 01
  • 在 Scala 中解析 JSON 最直接的方法是什么?

    我正在使用 Scala 开发一个简单的 Web 应用程序 计划是从外部 API 获取 JSON 数据 并将其插入到模板中 不幸的是 不能选择获取 XML 格式的数据 我尝试过使用 Twitter 的 scala json 库 但无法正确编译