在Scala中处理JSON?

时间:2015-04-20 21:20:08

标签: json scala playframework play-json

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"评估一次“{1}}”或仅评估一次?
  2. 是否值得将列表构造与此并行化 i(我不关心项目的顺序 出现在列表中),其中for-expression是一个JSON对象数组?
  3. 处理行(3 - 4)中的JSON并验证它的异常处理异常的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

  1. 如果你使用表达式JSON \ "items" 100次而不是1次,那么找到这些节点的工作量是100倍 - 没有任何majick memoization或类似的东西上。相对于执行它的次数,您的成本是O(n) - 而不是O(1)。但无论如何,对于这种应用而言,差异是无关紧要的 - 假设没有外环你没有向我们展示。

  2. 这对于并行化而言太小的bean来说没有任何意义 - 实际上,开销可能会减慢速度。如果你的真实案例是yield expensiveComputationBasedOn(items(i)),那么也许。

  3. 对于第3-4行,是的,如果你需要在这里处理它,请使用Try,否则更远(在调用调用此方法的方法中)。通常,在最高级别捕获异常,您仍然可以提供有关日志消息中出错的充分信息,您可以在其中执行任何故障恢复,以及您可以在哪里进行调试。这样可以节省工作量并确保您抓住所有内容 - 甚至是您无法想到的内容。如果您在&#34; main&#34;中,那很好。期权不会捕获例外情况。注意:如果是针对某个班级,则无论如何,您的老师可能正在寻找本地错误处理。