Scala如何将字符串转换为Map

6

如何在Scala中以最快的方式将以下JSON字符串转换为可变映射?我从一个大约500MB的文件中读取该输入字符串,因此我很关心速度。

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

4个回答

15

如果您的JSON与您示例中一样简单,即键值对序列,其中每个值都是字符串。您可以在Scala中使用纯文本:

如果您的 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
使用流式API是读取XML或JSON中的树形数据结构最快的方法:Jackson流式API读写JSON
流式处理会将输入分成诸如“对象开头”或“数组开头”的令牌,您需要为这些令牌构建解析器,在某些情况下这并不是一项简单的任务。

2

-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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接