0
我試圖將鍵值對的字符串轉換爲JSON字符串。關於KV對串的唯一知識是串的格式,即分隔空間,逗號分隔等等。對於例如我無法控制作爲輸入進入的鍵的數量或類型。將鍵值對的字符串轉換爲JSON字符串(Scala)的習慣方式
這是我想出來的,並且想看看這種方法看起來是好的還是令人敬畏的/尷尬的。如果有比這更好的替代方案,將不勝感激。
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"}
你所做的只是用逗號替換空格,並在字符串周圍放置一對大括號。只是說......'「{$ {s.replaceAll(」「,」,「)}}」'。順便說一句,這不是真正有效的json。 – Dima
迪馬 - 當然在你的情況下......還有很多你錯過的其他情況。 。所有的鍵都需要在JSON中引用.replace key value seperator with:爲了使它通用,使用正則表達式模式方法,我可以根據輸入格式更改它。用我的方法,我證實它確實是一個有效的JSON – codehammer
這不是「我的情況」,這是你的情況。你問過的情況。 當然,如果你對一個不同的正則表達式,它將是一個不同的情況下......你可以正確的不同的斯卡拉代碼,爲另一種情況。有些人更喜歡用scala編寫代碼,其他人更喜歡正則表達式......我猜,味道問題。不,你在你的問題中引用的是無效的json。 – Dima