本章介紹了如何使用Groovy語言來解析和生成JSON對(duì)象。
功能 | 庫 |
---|---|
JsonSlurper | JsonSlurper是一個(gè)將JSON文本或閱讀器內(nèi)容解析為Groovy數(shù)據(jù)的類 結(jié)構(gòu),例如地圖,列表和原始類型,如整數(shù),雙精度,布爾和字符串。 |
JsonOutput | 此方法負(fù)責(zé)將Groovy對(duì)象序列化為JSON字符串。 |
JsonSlurper是一個(gè)將JSON文本或閱讀器內(nèi)容解析為Groovy數(shù)據(jù)結(jié)構(gòu)的類,如地圖,列表和原始類型,如Integer,Double,Boolean和String。
def slurper = new JsonSlurper()
JSON slurper將文本或閱讀器內(nèi)容解析為列表和地圖的數(shù)據(jù)結(jié)構(gòu)。
JsonSlurper類自帶了一些用于解析器實(shí)現(xiàn)的變體。有時(shí),在解析某些字符串時(shí),您可能有不同的要求。讓我們舉一個(gè)例子,其中需要讀取從Web服務(wù)器的響應(yīng)返回的JSON。在這種情況下,使用解析器JsonParserLax變量是有益的。此parsee允許在JSON文本中的注釋以及沒有引號(hào)字符串等。要指定此類型的解析器,您需要在定義JsonSlurper的對(duì)象時(shí)使用JsonParserType.LAX解析器類型。
讓我們看下面這個(gè)例子。示例是使用http模塊從Web服務(wù)器獲取JSON數(shù)據(jù)。對(duì)于這種類型的遍歷,最好的選擇是將解析器類型設(shè)置為JsonParserLax變體。
http.request( GET, TEXT ) { headers.Accept = 'application/json' headers.'User-Agent' = USER_AGENT response.success = { res, rd -> def jsonText = rd.text //Setting the parser type to JsonParserLax def parser = new JsonSlurper().setType(JsonParserType.LAX) def jsonResp = parser.parseText(jsonText) } }
類似地,以下附加的解析器類型在Groovy中可用 -
JsonParserCharArray解析器基本上采用一個(gè)JSON字符串并對(duì)底層字符數(shù)組進(jìn)行操作。在值轉(zhuǎn)換期間,它復(fù)制字符子數(shù)組(稱為“斬波”的機(jī)制)并單獨(dú)操作它們。
JsonFastParser是JsonParserCharArray的一個(gè)特殊變體,是最快的解析器。JsonFastParser也稱為索引覆蓋解析器。在解析給定的JSON字符串期間,它盡可能努力地避免創(chuàng)建新的字符數(shù)組或String實(shí)例。它只保留指向底層原始字符數(shù)組的指針。此外,它會(huì)盡可能晚地推遲對(duì)象創(chuàng)建。
JsonParserUsingCharacterSource是一個(gè)非常大的文件的特殊解析器。它使用一種稱為“字符窗口化”的技術(shù)來解析具有恒定性能特征的大型JSON文件(大型意味著超過2MB大小的文件)。
讓我們來看看一些如何使用JsonSlurper類的例子。
import groovy.json.JsonSlurper class Example { static void main(String[] args) { def jsonSlurper = new JsonSlurper() def object = jsonSlurper.parseText('{ "name": "John", "ID" : "1"}') println(object.name); println(object.ID); } }
在上面的例子中,我們是 -
首先創(chuàng)建JsonSlurper類的一個(gè)實(shí)例
然后我們使用JsonSlurper類的parseText函數(shù)來解析一些JSON文本。
當(dāng)我們獲取對(duì)象時(shí),您可以看到我們實(shí)際上可以通過鍵訪問JSON字符串中的值。
以上程序的輸出如下 -
John 1
讓我們來看看另一個(gè)JsonSlurper解析方法的例子。在下面的示例中,我們將列出整數(shù)列表。你會(huì)注意到下面的代碼,我們可以使用每個(gè)的List方法,并傳遞一個(gè)閉包。
import groovy.json.JsonSlurper class Example { static void main(String[] args) { def jsonSlurper = new JsonSlurper() Object lst = jsonSlurper.parseText('{ "List": [2, 3, 4, 5] }') lst.each { println it } } }
以上程序的輸出如下 -
List=[2, 3, 4, 5, 23, 42]
JSON解析器還支持字符串,數(shù)字,對(duì)象,true,false和null的原始數(shù)據(jù)類型。 JsonSlurper類將這些JSON類型轉(zhuǎn)換為相應(yīng)的Groovy類型。
以下示例顯示如何使用JsonSlurper解析JSON字符串。在這里,您可以看到JsonSlurper能夠?qū)⒏鱾€(gè)項(xiàng)目解析為各自的基本類型。
import groovy.json.JsonSlurper class Example { static void main(String[] args) { def jsonSlurper = new JsonSlurper() def obj = jsonSlurper.parseText ''' {"Integer": 12, "fraction": 12.55, "double": 12e13}''' println(obj.Integer); println(obj.fraction); println(obj.double); } }
以上程序的輸出如下 -
12 12.55 1.2E+14
現(xiàn)在讓我們談?wù)勅绾卧贘son中打印輸出。這可以通過JsonOutput方法來完成。此方法負(fù)責(zé)將Groovy對(duì)象序列化為JSON字符串。
Static string JsonOutput.toJson(datatype obj)
參數(shù) -參數(shù)可以是數(shù)據(jù)類型的對(duì)象 - 數(shù)字,布爾,字符,字符串,日期,地圖,閉包等。
返回類型 -返回類型是一個(gè)JSON字符串。
以下是如何實(shí)現(xiàn)這一點(diǎn)的簡(jiǎn)單示例。
import groovy.json.JsonOutput class Example { static void main(String[] args) { def output = JsonOutput.toJson([name: 'John', ID: 1]) println(output); } }
以上程序的輸出如下 -
{"name":"John","ID":1}
JsonOutput也可以用于普通的舊Groovy對(duì)象。在下面的示例中,您可以看到我們實(shí)際上是傳遞Student類型的對(duì)象到JsonOutput方法。
import groovy.json.JsonOutput class Example { static void main(String[] args) { def output = JsonOutput.toJson([ new Student(name: 'John',ID:1), new Student(name: 'Mark',ID:2)]) println(output); } } class Student { String name int ID; }
以上程序的輸出如下 -
[{"name":"John","ID":1},{"name":"Mark","ID":2}]
更多建議: