【问题标题】:Scala Convert a string into a mapScala 将字符串转换为地图
【发布时间】:2013-11-25 03:34:58
【问题描述】:

最快的转换方法是什么

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

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

【问题讨论】:

    标签: json scala map


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        流式传输会将您的输入拆分为“对象开头”或“数组开头”等标记,您需要为这些标记构建解析器,这在某些情况下并非易事。

        【讨论】:

          【解决方案4】:

          保持简单。如果从文件中读取一个 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)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-07-11
            • 2021-02-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-02-17
            • 1970-01-01
            相关资源
            最近更新 更多