2015-04-22 52 views
0

我有這樣的代碼:我如何獲得價值從轉換後的字符串

def converted = "{\"" + resp.data.toString() 
           .replaceAll('=','\":\"') 
           .replaceAll('&','\",\"') + "\"}" 

它返回有效的JSON格式雖然我:

"response=3&responsetext=Duplicate transaction REFID:3154223053&authcode=&transactionid=&avsresponse=&cvvresponse=&orderid=&type=auth&response_code=300" 

我嘗試使用這個代碼轉換成JSON格式想要從該字符串中獲得特定的值我試過:

println converted.responsetext.toString() 

它有一個錯誤,說

沒有這樣的屬性:responseText的類:java.lang.String中

+0

...你有一個字符串。當你將正確的字符連接在一起時,它不是某種神奇的JSON類,它只是一個帶有JSON格式明文的字符串。 –

+0

有無論如何,我可以得到該json格式字符串的具體值 – pauleng

+0

是的,請參閱答案部分。 –

回答

0

您可以將請求參數地圖,如果需要JSON字符串如下:

String str = "response=3&responsetext=Duplicate transaction REFID:3154223053&authcode=&transactionid=&avsresponse=&cvvresponse=&orderid=&type=auth&response_code=300" 

def map = str.tokenize(/&/).collectEntries { 
    def entity = it.tokenize(/=/) 
    [ entity[0], entity[1] ] 
} 

assert map.responsetext == "Duplicate transaction REFID:3154223053" 

// Json 
println new groovy.json.JsonBuilder(map).toPrettyString() 

如果你想繼續從你現在有什麼,而不是現在,然後執行下面應該是足夠的:

def items = new groovy.json.JsonSlurper().parseText(converted) 
assert items.responsetext == "Duplicate transaction REFID:3154223053"