如何将我存储为字符串的数据转换为地图

时间:2015-06-01 12:49:18

标签: string grails

我的DDBB中存储了一个字符串,例如在我的列数据中我有这个字符串:"name=James castle&age=20"我希望在我的服务中转换为地图

我正在尝试这样的事情:

List <NameValuePair> parameters = myDomainInstance.data
if (org.externalDeliveryParameters){
    parameters = URLEncodedUtils.parse(org.externalDeliveryParameters,
                                       StandardCharsets.UTF_8)
}

我收到此错误:

Cannot cast object 'name=James castle&age=20' with class 'java.lang.String' to class 'java.util.List'

有人知道我怎么能用List<NameValuePair>或其他形式做到这一点?

3 个答案:

答案 0 :(得分:2)

我怀疑你真的想写这样的东西

List <NameValuePair> parameters 
if (myDomainInstance.data) {
   parameters = URLEncodedUtils.parse(myDomainInstance.data, StandardCharsets.UTF_8)
}

这是基于输入和输出参数。

答案 1 :(得分:0)

你可以这样做:

s = "name=James castle&age=20"

def map = s.split('&').inject([:]) {result, kv-> def (key, value) = kv.split('=').toList(); result[key] = value != null ? value : null; result }

如果您在数据库中存储URL,则需要使用Grails提供的decordeURL()方法,请查看以下内容:

def map = s.split('&').inject([:]) {result, kv-> def (key, value) = kv.split('=').toList(); result[key] = value != null ? value.decodeURL() : null; result }

答案 2 :(得分:0)

使用简单的正则表达式

def m = [:]
'name=James castle&age=20'.eachMatch( /([^&=]+)=([^&=]+)/ ){ m[ it[ 1 ] ] = it[ 2 ] }
assert m == [name:'James castle', age:'20']