本章主要講解基礎中高級部分,主要內容爲代碼,如若不感興趣者,能夠大體瀏覽標題便可java
groovy json操做詳解node
JsonSlurper slurper=new JsonSlurper()
slurper.parse()
複製代碼
//普通格式輸出
def list=[new Person(name: 'john',age: 20),new Person(name: 'Jane',age: 18)]
println JsonOutput.toJson(list)
//按照json格式輸出的結果
def json=JsonOutput.toJson(list)
println JsonOutput.prettyPrint(json)
複製代碼
大致介紹下第三方json的引用方式:json
首先在和src同級的文件夾上建立libs文件夾,而後將jar文件複製到libs文件夾中,
而後在jar文件上右鍵選擇add the library,到此就能夠愉快的使用第三方lib了。
複製代碼
def getNetworkData(String url){
//發送http請求 java
def connection=new URL(url).openConnection()
connection.setRequestMethod('GET')
connection.connect()
def response=connection.content.text
//將json轉化爲實體對象 groovy
def jsonSluper=new JsonSlurper()
return jsonSluper.parseText(response)
}
def reponse=getNetworkData('請求地址')
//輸出你想要的結果
println (reponse.data.head.name)
複製代碼
xml文件操做詳解
在Java中咱們對xml進行處理一般有兩種方式:
①DOM文檔驅動處理
②SAX事件處理(較爲節省內存,操做複雜)api
final String xml = ''' <response version-api="2.0"> <value> <books id="1" > <book id="1" avaliable="10"> <title>Android開發藝術探索</title> <author id="1">任玉剛</author> </book> <book id="2" avaliable="100"> <title>第一行代碼</title> <author id="2">郭霖</author> </book> <book id="3" avaliable="100"> <title>瘋狂Android講義</title> <author id="3">李剛</author> </book> <book id="4" avaliable="100"> <title>Vue從入門到精通</title> <author id="3">李剛</author> </book> </books> </value> </response> '''
//開始解析xml數據
def xmlSpluper=new XmlSlurper()
def response=xmlSpluper.parseText(xml)
//打印title
println( response.value.books.book[0].title.text())
//打印出屬性節點的信息使用@
println response.value.books.book[1].@avaliable
//開始解析xml數據
def xmlSpluper = new XmlSlurper()
def response = xmlSpluper.parseText(xml)
//普通遍歷
def list1 = []
response.value.books.book.each{books->
//對書進行遍歷
def author=books.author.text()
if (author.equals('李剛')){
list1.add(books.title.text())
}
}
println list1.toListString()
//深度遍歷depthFirst()等價於"**"
def title = response.depthFirst().findAll { book -> return book.author.text() == '李剛' ? true : false }
println title.toListString()
//廣度遍歷children()等價於"*"
def resName=response.value.books.children().findAll{
node->
node.name()=='book' && node.@id=='2'
}.collect{
node->return node.title.text()
}
println resName
複製代碼
//靜態生成
def sw= new StringWriter()
//MarkupBuilder生成xml格式的數據核心類
def xmlBuilder=new MarkupBuilder(sw)
//建立根節點langs
xmlBuilder.langs(type:'current',count:'3',
mainstream:'true'){
language(flavor:'static',version:'1.5','java'){age('16')}
language(flavor:'dynamic',version:'1.6','Groovy')
language(flavor:'dynamic',version:'1.9','JavaScript')
}
println sw
//實體類動態生成
class Langs{
String type='current'
int count=3
boolean mainstream=true
def language=[
new Language(flavor:'static',version:'1.5',value:'java'),
new Language(flavor:'dynamic',version:'1.6',value:'Groovy'),
new Language(flavor:'dynamic',version:'1.9',value:'JavaScript')
]
}
class Language{
String flavor
String version
String value
}
def sw1= new StringWriter()
////MarkupBuilder生成xml格式的數據核心類
def xmlBuilder=new MarkupBuilder(sw)
def langs=new Langs()
xmlBuilder.langs(type:langs.type,count:langs.count,mainstream:langs.mainstream){
langs.language.each {
//遍歷全部的子節點
lang->language(
flavor:lang.flavor,version:lang.version,lang.value
)
}
}
println sw1
複製代碼
每日一練:經過上面的json和xml的操做,有興趣的小夥伴能夠嘗試將json數據轉換成xml的數據格式
複製代碼
*** groovy 文件操做**
java中處理文件的方式最多見的就是流處理(inputstream、outputstream等)。
全部Java對文件的處理類,groovy均可以使用
實戰演練:文本文件的讀寫和copybash
def file1 ='/Users/用戶名/IDEProjects/MyGroovy/MyGroovy.iml'
def file2 = '/Users/用戶名/IDEProjects/MyGroovy/MyGroovy2.iml'
def result=copy(file1,file2)
println result
def copy(String sourcePath, String destationPath) {
try {
//建立目標文件
def desFile = new File(destationPath)
if (!desFile.exists()) {
desFile.createNewFile()
}
//開始拷貝
new File(sourcePath).withReader { reader ->
def lines = reader.readLines()
desFile.withWriter {
write ->
lines.each {
line ->
write.append(line+"\r\n")
}
}
}
return true
}
catch (Exception e) {
e.printStackTrace()
}
return false
}
複製代碼
實戰演練:對象的讀寫和copy網絡
def person=new Person(name:'Haha',age:25)
saveObject(person,'../../person.bin')
readObject(''../../person.bin'')
//對象保存
def saveObject(Object object, String path) {
try {
//建立目標文件
def desFile = new File(path)
if (!desFile.exists()) {
desFile.createNewFile()
}
//開始拷貝
desFile.withObjectOutputStream {
out -> out.writeObject(object)
}
return true
}
catch (Exception e) {
e.printStackTrace()
}
return false
}
//對象讀取
def readObject(String path){
def obj=null
try {
def file=new File(path)
if (file==null||!file.exists())return null
file.withObjectInputStream {
input->obj=input.readObject()
}
}catch(Exception e){
}
return obj
}
複製代碼
在Groovy中咱們不須要本身手動關閉流的操做。app
好了,到此爲此,咱們就已經將groovy的基礎部分講述完畢,基礎很重要,但願你們能多練習下前面的基礎內容部分。
從下一章節開始,咱們開始學習進階Gradle,下期再見學習