I have a string like
def data = \"session=234567893egshdjchasd&userId=12345673456&timeOut=1800000\"
I want to convert it to a map
If you're looking for efficient, regular expressions are where it's at:
def data = "session=234567893egshdjchasd&userId=12345673456&timeOut=1800000"
def map = [:]
data.findAll(/([^&=]+)=([^&]+)/) { full, name, value -> map[name] = value }
println map
prints:
[session:234567893egshdjchasd, userId:12345673456, timeOut:1800000]
If you're not familiar with regular expressions, it might look a little foreign, but it's really not that complicate. It just has two (groups), the first group is any character but a "&" or a "=". The second group is any character besides a "=". The capture groups are on either side of a "=".
I don't know think this is would run any faster, but it does suggest itself in terms of syntactic parsimony:
def data = 'session=234567893egshdjchasd&userId=12345673456&timeOut=1800000'
def result = data.split('&').inject([:]) { map, token ->
//Split at "=" and return map with trimmed values
token.split('=').with {
map[it[0].trim()] = it[1].trim()
}
map
}
Personally, I like Don's answer for readability and maintainability, but depending on context, this may be appropriate.
Edit: This is actually a reformatted one-liner.