2014-06-30 45 views
1

我有一個有趣的問題:我無法訪問我的hashmap鍵。如何訪問grails中的hashMaps

我有以下的HashMap:

{a=Retrieve User Account call failed, b=This user has multiple accounts} 

我得到空變量的時候我做任何操作:

"${myMap.get('a')}" 
"${myMap['a']}" 
"${myMap.a}" 

我從拿到假值:

"${myMap.containsKey('a')}" 
"${myMap.keySet().contains('a')}" 

但當我這樣做時,我會變得真實:

"${myMap.keySet()[1] == 'a'}" 

什麼問題?我怎麼能在hashmap鍵或keySet上調用contains來查明'a'是否在hash/list中?

如果有幫助的任何,我使用Groovy 2.3.0-RC-2插件對Groovy/Grails的工具套件和Grails 2.4.1

+0

這不是一個有效的HashMap,看起來是某種真正打破JSON的。 –

+0

你所描述的並不是真的可能,但考慮到你在示例中代表Map的方式,很難說它是否是一個Map。除此之外,如果您的Map中包含「a」鍵,並且與該鍵關聯的值爲String「Retrieve User Account call failed」,則myMap.get('a')'''myMap [ 'a']'和'myMap.a'都將評估爲字符串「檢索用戶帳戶調用失敗」。 –

+1

@JoshuaMoore它沒有被破壞JSON,它是java Map的標準'toString()'。 –

回答

1

這可能是一個重複的問題,但我要回答無論如何。您在Groovy中的語法有點偏離。

在這裏看到:http://groovy.codehaus.org/Collections

它們的例子:

def map = [name:"Gromit", likes:"cheese", id:1234] 
assert map.get("name") == "Gromit" 
assert map.get("id") == 1234 
assert map["name"] == "Gromit" 
assert map['id'] == 1234 
assert map instanceof java.util.Map 

def emptyMap = [:] 
assert emptyMap.size() == 0 
emptyMap.put("foo", 5) 
assert emptyMap.size() == 1 
assert emptyMap.get("foo") == 5 

您的地圖:

def map = [a:"Retrieve User Account call failed", 
    b:"This user has multiple accounts"] 

assert map.get("a") == "Retrieve User Account call failed" 
// also 
assert map.a == "Retrieve User Account call failed" 
+4

你有單等於的斷言是無效的。你需要等於兩倍。 –

+0

如果有投票按鈕可供評論!謝謝 – chrislovecnm

相關問題