Scala将字符串转换为地图

时间:2013-11-12 19:44:24

标签: json scala map

转换此

的最快方法是什么?

{"a":"ab","b":"cd","c":"cd","d":"de","e":"ef","f":"fg"}

进入scala中的可变映射?我从~500MB文件中读取了这个输入字符串。这就是我关注速度的原因。

4 个答案:

答案 0 :(得分:10)

如果你的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

答案 1 :(得分:2)

以XML或JSON读取树数据结构的最快方法是应用流API:Jackson Streaming API To Read And Write JSON

Streaming会将您的输入拆分为令牌,如“对象的开头”或“数组的开头”,您需要为这些令牌构建解析器,在某些情况下这不是一项简单的任务。

答案 2 :(得分:1)

这看起来像一个JSON文件,正如安德烈所说。你应该consider this answer。它给出了一些示例Scala代码。此外,这个答案提供了一些different JSON libraries and their relative merits

答案 3 :(得分:-1)

保持简单。如果从文件中读取json字符串并转换为Scala映射

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)