在 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)
- 如果我合并最后两行
for (i <- 0 until 100) yield (JSON \ "items")(i)
,术语 JSON \ "items"
会针对每个 i
计算还是只计算一次?
- 是否值得将列表构造与此并行化
for-expression
(我不关心项目的顺序
出现在列表中),其中 items
是 JSON 个对象的数组?
- 解析第 (3 - 4) 行中的 JSON 并验证异常的最佳方法是什么?
如果您使用表达式 JSON \ "items"
100 次而不是 1 次,那么找到这些节点的工作量将增加 100 倍——没有 majick 记忆或类似的事情发生。你的成本是 O(n) 相对于你执行它的次数 - 而不是 O(1)。但无论如何,对于这个应用程序来说,区别是无关紧要的——假设没有外循环,你就没有向我们展示。
对于并行化来说,这太小了,没有任何意义——事实上,开销可能会减慢速度。如果你的真实情况是yield expensiveComputationBasedOn(items(i))
,那么也许。
对于第 3-4 行,是的,如果您需要在此处处理它,请在此处使用 Try
,否则在更远的地方(在调用调用此方法的方法中)。通常,在最高级别捕获异常,您仍然可以在日志消息中提供有关错误信息的足够信息、可以执行任何故障恢复以及可以进行调试的位置。这可以节省工作并确保您捕捉到所有内容——甚至是您没有想到的内容。如果那在您的 "main" 中,那很好。选项不会捕获异常。注意:如果这是 class,您的老师可能正在寻找本地错误处理,无论如何。
在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)
- 如果我合并最后两行
for (i <- 0 until 100) yield (JSON \ "items")(i)
,术语JSON \ "items"
会针对每个i
计算还是只计算一次? - 是否值得将列表构造与此并行化
for-expression
(我不关心项目的顺序 出现在列表中),其中items
是 JSON 个对象的数组? - 解析第 (3 - 4) 行中的 JSON 并验证异常的最佳方法是什么?
如果您使用表达式
JSON \ "items"
100 次而不是 1 次,那么找到这些节点的工作量将增加 100 倍——没有 majick 记忆或类似的事情发生。你的成本是 O(n) 相对于你执行它的次数 - 而不是 O(1)。但无论如何,对于这个应用程序来说,区别是无关紧要的——假设没有外循环,你就没有向我们展示。对于并行化来说,这太小了,没有任何意义——事实上,开销可能会减慢速度。如果你的真实情况是
yield expensiveComputationBasedOn(items(i))
,那么也许。对于第 3-4 行,是的,如果您需要在此处处理它,请在此处使用
Try
,否则在更远的地方(在调用调用此方法的方法中)。通常,在最高级别捕获异常,您仍然可以在日志消息中提供有关错误信息的足够信息、可以执行任何故障恢复以及可以进行调试的位置。这可以节省工作并确保您捕捉到所有内容——甚至是您没有想到的内容。如果那在您的 "main" 中,那很好。选项不会捕获异常。注意:如果这是 class,您的老师可能正在寻找本地错误处理,无论如何。