2017-06-16 67 views
0

我需要將常規字符串轉換爲地圖對象。字符串正是:將常規字符串轉換爲常規地圖

"\"{\\\"1\\\":[],\\\"2\\\":[],\\\"3\\\":[{\\\"name\\\":\\\"PVR_Test_Product\\\",\\\"id\\\":\\\"100048\\\"}],\\\"4\\\":[],\\\"5\\\":[]}\"" 

我需要獲取對應於「name」的值。我曾嘗試使用JsonBuilder,JsonSlurper和regexp方法處理此問題。但我還沒有找到解決辦法。

爲了簡化事情,我已經去除了反斜槓:replaceAll .The減少字符串是:

""{"1":[],"2":[],"3":[{"name":"PVR_Test_Product","id":"100048"}],"4":[],"5":[]}"" 

期待任何人的幫助上this.I使用Grails 2.5.1和2.4.10常規我。

+0

JSON.parse(string);我認爲這會做。謝謝 – Biswas

回答

1

你有一個json字符串,可以用JsonSlurper解析。

在這裏你去:

def string = """{"1":[],"2":[],"3":[{"name":"PVR_Test_Product","id":"100048"}],"4":[],"5":[]}""" 
def json = new groovy.json.JsonSlurper().parseText(string) 
assert json instanceof Map​​​​​ 

你可以趕快試試這個在線Demo

+0

這適用於groovyConsole,但在grailsConsole中失敗。 – user1858851

0
/* 

i put exactly this string into the file 1.gr 
"\"{\\\"1\\\":[],\\\"2\\\":[],\\\"3\\\":[{\\\"name\\\":\\\"PVR_Test_Product\\\",\\\"id\\\":\\\"100048\\\"}],\\\"4\\\":[],\\\"5\\\":[]}\"" 

*/ 

def s= new File("./1.gr").text 
println s 
// output> "\"{\\\"1\\\":[],\\\"2\\\":[],\\\"3\\\":[{\\\"name\\\":\\\"PVR_Test_Product\\\",\\\"id\\\":\\\"100048\\\"}],\\\"4\\\":[],\\\"5\\\":[]}\"" 
s=Eval.me(s) 
println s 
// output> "{\"1\":[],\"2\":[],\"3\":[{\"name\":\"PVR_Test_Product\",\"id\":\"100048\"}],\"4\":[],\"5\":[]}" 
s=Eval.me(s) 
println s 
// output> {"1":[],"2":[],"3":[{"name":"PVR_Test_Product","id":"100048"}],"4":[],"5":[]} 

//now it's possible to parse json 
def json = new groovy.json.JsonSlurper().parseText(s) 
0

有人交給你了你的數據的JSON的JSON。一味地去除\可能會非常糟糕。但是你可以僅僅去掉JSON兩次。

與往常一樣,在這種情況下:如果有人給你提供這種形狀的數據,你可以跟他們交談,確保他們有完美的理由去做這些事情。往往不是,這種錯誤。

def jsonOfJson = "\"{\\\"1\\\":[],\\\"2\\\":[],\\\"3\\\":[{\\\"name\\\":\\\"PVR_Test_Product\\\",\\\"id\\\":\\\"100048\\\"}],\\\"4\\\":[],\\\"5\\\":[]}\"" 
def slurper = new groovy.json.JsonSlurper() 
def json = slurper.parseText(jsonOfJson) 
println(json.inspect()) 
// -> '{"1":[],"2":[],"3":[{"name":"PVR_Test_Product","id":"100048"}],"4":[],"5":[]}' 
def data = slurper.parseText(json) 
println(data.inspect()) 
// -> ['1':[], '2':[], '3':[['name':'PVR_Test_Product', 'id':'100048']], '4':[], '5':[]] 
assert data["3"].size()==1