将键值对的字符串转换为JSON字符串的惯用方法(Scala)

时间:2016-05-30 00:36:52

标签: json scala key-value

我正在尝试将一串键值对转换为JSON字符串。关于KV对的唯一知识就是字符串的格式,即空格分隔,逗号分隔等等。我无法控制作为输入进入的键的数量或类型。

这是我想出来的,并希望看到这种方法看起来是好/令人敬畏/尴尬。如果有比这更好的替代方案,我们将不胜感激。

INPUT : clientIp="1.1.1.1" identifier="a.b.c" key1=10 key2="v3"

final val KV_PATTERN = "(\"[^\"]*\"|[^,\\\"\\s]*)=(\"[^\"]*\"|[^,\\\"\\s]*)".r

val cMap = KV_PATTERN.findAllMatchIn(inputString).map(m => (m.group(1).trim(), m.group(2).trim())).toMap

val json = cMap.map { case (key, value) => if (!key.startsWith("\"")) s""""$key"""" + ":" + value else s"$key:$value" }.mkString("{", ",", "}")`

OUTPUT: {"clientIp":"1.1.1.1","identifier":"a.b.c","key1":10,"key2":"v3"}

1 个答案:

答案 0 :(得分:2)

"{"+ inputString.split(" ").map{case i => val t = i.split("="); s""""${t(0).replaceAll("^\"|\"$", "")}": ${t(1)}"""}.mkString(",") + "}"

也许这更清洁。