内容简介:运行结果:还提供了一种可以格式化打印的方法:运行结果:
3.1 Json操作详解
将实体对象转化为json
def list = [new Person(name: 'Jhon',age: 25),
new Person(name: 'Major',age: 26)]
def json = JsonOutput.toJson(list)
println json
运行结果:
[{"age":25,"name":"Jhon"},{"age":26,"name":"Major"}]
还提供了一种可以格式化打印的方法:
println JsonOutput.prettyPrint(json)
运行结果:
[
{
"age": 25,
"name": "Jhon"
},
{
"age": 26,
"name": "Major"
}
]
从网络请求的数据转为实体对象
def getNetworkData(String url){
def connection = new URL(url).openConnection()
connection.setRequestMethod('GET')
connection.connect()
def response = connection.content.text
//将json转换为实体对象
def jsonSluper = new JsonSlurper()
return jsonSluper.parseText(response)
}
def response = getNetworkData("")
println response.data.head.name
3.2 xml处理详解
先定义一段xml:
final String xml = '''
<response version-api="2.0">
<value>
<books id="1" classification="android">
<book available="20" id="1">
<title>疯狂Android讲义</title>
<author id="1">李刚</author>
</book>
<book available="14" id="2">
<title>第一行代码</title>
<author id="2">郭林</author>
</book>
<book available="13" id="3">
<title>Android开发艺术探索</title>
<author id="3">任玉刚</author>
</book>
<book available="5" id="4">
<title>Android源码设计模式</title>
<author id="4">何红辉</author>
</book>
</books>
<books id="2" classification="web">
<book available="10" id="1">
<title>Vue从入门到精通</title>
<author id="4">李刚</author>
</book>
</books>
</value>
</response>
'''
最简单的解析xml
// 开始解析此xml数据 def xmlSluper = new XmlSlurper() def resonse = xmlSluper.parseText(xml) println resonse.value.books[0].book[0].title.text() println resonse.value.books[0].book[0].author.text() println resonse.value.books[1].book[0].@available
运行结果:
疯狂Android讲义 李刚 10
从书节点进行遍历
//书结点进行遍历
def list = []
resonse.value.books.each{ books ->
books.book.each{ book ->
def author = book.author.text()
if (author.equals('李刚')){
list.add(book.title.text())
}
}
}
println list.toListString()
运行结果:
[疯狂Android讲义, Vue从入门到精通]
深度遍历xml数据
//深度遍历xml数据
def titles = resonse.depthFirst().findAll {book ->
return book.author.text() == '李刚'?true: false
}
println titles.toListString()
运行结果:
[疯狂Android讲义李刚, Vue从入门到精通李刚]
广度遍历xml数据
//广度遍历xml数据
def name = resonse.value.books.children().findAll{ node ->
node.name() == 'book' && node.@id == 2
}.collect{node ->
return node.title.text()
}
println name
运行结果:
[第一行代码]
生成xml格式数据
生成xml格式数据 <langs type='current' count='3' mainstream='true'> <language flavor='static' version='1.5'>Java</language> <language flavor='dynamic' version='1.3'>Groovy</language> <language flavor='dynamic' version='1.6'>JavaScript</language> </langs>
-
使用MarkupBuilder生成xml
def sw = new StringWriter() // 用来生成xml数据的核心类 def xmlBuilder = new MarkupBuilder(sw) xmlBuilder.langs(type: 'current',count:'3',mainstream:'true'){ //第一个language节点 language(flavor:'static',version:'1.5'){ age('16') } language(flavor:'dynamic',version:'1.6.0','Groovy') language(flavor:'dynamic',version:'1.9','JavaScript') } println sw -
使用实体类生成xml
def langs = new Langs() xmlBuilder.langs(type: langs.type,count:langs.count,mainstream: langs.mainstream){ langs.languages.each {lang -> language(flavor:lang.flavor,version:lang.version,lang.value) } } println sw //对应xml中的langs结点 class Langs{ String type = 'current' int count = 3 boolean mainstream = true def languages = [ new Language(flavor: 'static', version: '1.5', value: 'Java'), new Language(flavor: 'dynamic', version: '1.3', value: 'Groovy'), new Language(flavor: 'dynamic', version: '1.6', value: 'JavaScript') ] } //对应xml中的languang结点 class Language{ String flavor String version String value }运行结果:
<langs type='current' count='3' mainstream='true'> <language flavor='static' version='1.5'> <age>16</age> </language> <language flavor='dynamic' version='1.6.0'>Groovy</language> <language flavor='dynamic' version='1.9'>JavaScript</language> </langs>
3.3 file操作详解
定义一个file
def file = new File('../../HelloGroovy.iml')
file的读取方式
-
方式1
file.eachLine {line -> println line }运行结果:
<?xml version="1.0" encoding="UTF-8"?> <module type="JAVA_MODULE" version="4"> <component name="NewModuleRootManager" inherit-compiler-output="true"> <exclude-output /> <content url="file://$MODULE_DIR$"> <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> </content> <orderEntry type="inheritedJdk" /> <orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="library" name="groovy-2.5.2" level="application" /> </component> </module> -
方式2
def text = file.getText() println text
运行结果:
<?xml version="1.0" encoding="UTF-8"?> <module type="JAVA_MODULE" version="4"> <component name="NewModuleRootManager" inherit-compiler-output="true"> <exclude-output /> <content url="file://$MODULE_DIR$"> <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> </content> <orderEntry type="inheritedJdk" /> <orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="library" name="groovy-2.5.2" level="application" /> </component> </module> -
方式3
def result = file.readLines() println result.toListString()
运行结果:
[<?xml version="1.0" encoding="UTF-8"?>, <module type="JAVA_MODULE" version="4">, <component name="NewModuleRootManager" inherit-compiler-output="true">, <exclude-output />, <content url="file://$MODULE_DIR$">, <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />, </content>, <orderEntry type="inheritedJdk" />, <orderEntry type="sourceFolder" forTests="false" />, <orderEntry type="library" name="groovy-2.5.2" level="application" />, </component>, </module>]
-
方式4
// 读取文件部分内容 def reader = file.withReader {reader -> char[] buffer = new char[100] reader.read(buffer) return buffer } println reader运行结果:
<?xml version="1.0" encoding="UTF-8"?> <module type="JAVA_MODULE" version="4"> <component name="Ne
拷贝文件
// 拷贝文件
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 { writer ->
lines.each {line ->
writer.append(line + "\r\n")
}
}
}
return true
}catch (Exception e){
e.printStackTrace()
}
return false
}
def copyResult = copy('../../HelloGroovy.iml',
'../../HelloGroovy2.iml')
println copyResult
运行之后,控制台返回true,然后再目录中生成了HelloGroovy2.iml文件
将对象序列化保存成文件
// 将对象序列化保存成文件
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 person = new Person(name: 'shijiacheng', age: 25)
saveObject(person, '../../person.bin')
读取文件内容转化为序列化对象
// 读取文件内容转化为序列化对象
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){
e.printStackTrace()
}
return obj
}
def readReuslt = (Person) readObject('../../person.bin')
println "the name is ${readReuslt.name} and the age is ${readReuslt.age}"
运行结果:
the name is shijiacheng and the age is 25
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数据挖掘
(美)Jiawei Han、(加)Micheline Kamber、(加)Jian Pei / 范明、孟小峰 / 机械工业出版社 / 2012-8 / 79.00元
数据挖掘领域最具里程碑意义的经典著作 完整全面阐述该领域的重要知识和技术创新 这是一本数据挖掘和知识发现的优秀教材,结构合理、条理清晰。本书既保留了相当篇幅讲述数据挖掘的基本概念和方法,又增加了若干章节介绍数据挖掘领域最新的技术和发展,因此既适合初学者学习又适合专业人员和实践者参考。本书视角广阔、资料翔实、内容全面,能够为有意深入研究相关技术的读者提供足够的参考和支持。总之, 强烈推荐......一起来看看 《数据挖掘》 这本书的介绍吧!