我正在尝试将一串键值对转换为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"}
答案 0 :(得分:2)
"{"+ inputString.split(" ").map{case i => val t = i.split("="); s""""${t(0).replaceAll("^\"|\"$", "")}": ${t(1)}"""}.mkString(",") + "}"
也许这更清洁。