Groovy是一種基于JVM運行的動態語言,并且具有很強的JSON處理能力。在Groovy中,可以很方便地從JSON中獲取想要的值,只需要使用Map的方式進行操作。
下面是一段簡單的Groovy代碼,用于從JSON中獲取key為"name"的值:
def json = '{"name": "Tom", "age": 20}' def map = new JsonSlurper().parseText(json) println map.name
以上代碼首先定義了一個JSON串和一個Map,并使用JsonSlurper的parseText()方法將JSON解析為Map,之后就可以方便地通過Map的方式獲取JSON中的key值了。
如果JSON中的某個節點是一個數組,可以使用list的方式來獲取數組中的值。下面的代碼演示了如何從JSON中獲取key為"students"的數組中的第一個元素的"name"值:
def json = '{"students": [{"name": "Tom", "score": 90}]}' def map = new JsonSlurper().parseText(json) println map.students[0].name
以上代碼中,首先定義了一個包含一個數組的JSON串和一個Map,之后通過Map的方式獲取數組中的第一個元素,并使用點號語法獲取該元素的"name"值。
在處理復雜的JSON時,還可以使用遞歸的方式進行操作,下面的代碼演示了如何從JSON中獲取key為"data"的數組中的所有"name"值:
def json = '{"data": [{"name": "Tom", "age": 20}, {"name": "John", "age": 22}]}' def map = new JsonSlurper().parseText(json) def getNameFromMap(def map) { map.each { k, v ->if (v instanceof Map) { getNameFromMap(v) } else if (v instanceof List) { v.each { getNameFromMap(it) } } else if (k == 'name') { println v } } } getNameFromMap(map.data)
以上代碼中,定義了一個方法getNameFromMap(),該方法會遞歸遍歷整個Map,并獲取其中所有"name"值。該方法首先判斷當前值是否是Map或List類型,如果是,則繼續遞歸遍歷;如果當前key為"name",則輸出該值。