在 Scala 中处理 JSON?

Dealing with JSON in Scala?

Scala 2.11中,有以下代码:

import play.api.libs.json._
...
val data = // read json from file                             (3)
val JSON: JsValue = Json.parse(data mkString "\n")            (4)
val items = JSON \ "items"
for (i <- 0 until 100) yield items(i)
  1. 如果我合并最后两行 for (i <- 0 until 100) yield (JSON \ "items")(i),术语 JSON \ "items" 会针对每个 i 计算还是只计算一次?
  2. 是否值得将列表构造与此并行化 for-expression(我不关心项目的顺序 出现在列表中),其中 items 是 JSON 个对象的数组?
  3. 解析第 (3 - 4) 行中的 JSON 并验证异常的最佳方法是什么?
  1. 如果您使用表达式 JSON \ "items" 100 次而不是 1 次,那么找到这些节点的工作量将增加 100 倍——没有 majick 记忆或类似的事情发生。你的成本是 O(n) 相对于你执行它的次数 - 而不是 O(1)。但无论如何,对于这个应用程序来说,区别是无关紧要的——假设没有外循环,你就没有向我们展示。

  2. 对于并行化来说,这太小了,没有任何意义——事实上,开销可能会减慢速度。如果你的真实情况是yield expensiveComputationBasedOn(items(i)),那么也许。

  3. 对于第 3-4 行,是的,如果您需要在此处处理它,请在此处使用 Try,否则在更远的地方(在调用调用此方法的方法中)。通常,在最高级别捕获异常,您仍然可以在日志消息中提供有关错误信息的足够信息、可以执行任何故障恢复以及可以进行调试的位置。这可以节省工作并确保您捕捉到所有内容——甚至是您没有想到的内容。如果那在您的 "main" 中,那很好。选项不会捕获异常。注意:如果这是 class,您的老师可能正在寻找本地错误处理,无论如何。