【发布时间】:2020-02-21 22:04:27
【问题描述】:
我有一个大字符串,我想将其转换为 groovy 中的 Map。
字符串数据是一个键值对数组,每个键和值都括在方括号 [] 中并用逗号分隔。完整的数据字符串在这里:https://pastebin.com/raw/4rBWRzMs
某些值可以为空,例如'[]' 或包含 , 和 : 字符的值列表,例如
[1BLL:220,1BLE:641,2BLL:871,2BLE:475,SW:10029,KL:0,KD:78,ODT:148,AVB:358]
如果这些字符不括在方括号 [] 中,我只想拆分它们。
我尝试过的代码在有值列表时会中断。有没有更好的办法?谢谢。
String testData="[[DEVICE_PROVISIONED]: [1], [aaudio.hw_burst_min_usec]: [2000],[debug.hwui.use_buffer_age]: [false], [ro.boot.boottime][1BLL:220,1BLE:641,2BLL:871,2BLE:475,SW:10029,KL:0,KD:78,ODT:148,AVB:358], ro.boot.hardware]: [walleye],[dev.mnt.blk.postinstall]: [],[ro.boot.usbradioflag]: [0], [ro.boot.vbmeta.avb_version]: [1.0], [ro.boot.vbmeta.device]: [/dev/sda18], [ro.boot.vbmeta.device_state]: [unlocked]]"
def map = [:]
testData.replaceAll('\\[]','null').replaceAll("\\s","").replaceAll('\\[','').replaceAll(']','').split(",").each {param ->
def nameAndValue = param.split(":")
map[nameAndValue[0]] = nameAndValue[1]
}
【问题讨论】:
-
你可能需要为此编写一个解析器
-
除了第一个
"["和最后一个"]"之外是否还有嵌套括号,或者数据是否仅包含简单的[key]: [value]对?键和/或值中是否有方括号,必须以某种方式转义?顺便说一句,您的testData字符串似乎在语法上无效(例如,在[ro.boot.boottime]之后缺少":",在ro.boot.hardware之前缺少"[")。将字符串分成多行有助于阅读。
标签: arrays string groovy key-value