【发布时间】:2013-11-25 03:34:58
【问题描述】:
最快的转换方法是什么
{"a":"ab","b":"cd","c":"cd","d":"de","e":"ef","f":"fg"}
进入 scala 中的可变映射?我从 ~500MB 文件中读取了这个输入字符串。这就是我担心速度的原因。
【问题讨论】:
最快的转换方法是什么
{"a":"ab","b":"cd","c":"cd","d":"de","e":"ef","f":"fg"}
进入 scala 中的可变映射?我从 ~500MB 文件中读取了这个输入字符串。这就是我担心速度的原因。
【问题讨论】:
如果您的 JSON 与您的示例一样简单,即一系列键/值对,其中每个值都是一个字符串。你可以用普通的 Scala 做:
myString.substring(1, myString.length - 1)
.split(",")
.map(_.split(":"))
.map { case Array(k, v) => (k.substring(1, k.length-1), v.substring(1, v.length-1))}
.toMap
【讨论】:
正如 Andrey 所说,这看起来像一个 JSON 文件。你应该consider this answer。它给出了一些示例 Scala 代码。另外,这个答案给出了一些different JSON libraries and their relative merits。
【讨论】:
以 XML 或 JSON 格式读取树数据结构的最快方法是应用流式 API:Jackson Streaming API To Read And Write JSON。
流式传输会将您的输入拆分为“对象开头”或“数组开头”等标记,您需要为这些标记构建解析器,这在某些情况下并非易事。
【讨论】:
保持简单。如果从文件中读取一个 json 字符串并转换为 scala map
import spray.json._
import DefaultJsonProtocol._
val jsonStr = Source.fromFile(jsonFilePath).mkString
val jsonDoc=jsonStr.parseJson
val map_doc=jsonDoc.convertTo[Map[String, JsValue]]
// Get a Map key value
val key_value=map_doc.get("key").get.convertTo[String]
// If nested json, re-map it.
val key_map=map_doc.get("nested_key").get.convertTo[Map[String, JsValue]]
println("Nested Value " + key_map.get("key").get)
【讨论】: