groovy 速学 - 23 - Xml及 Json 的处理
发布时间:2020-12-14 16:47:53 所属栏目:大数据 来源:网络整理
导读:目录 Xml 及 Json 的处理 Xml 的处理 创建 Xml MarkupBuilder StreamingMarkupBuilder 解析 Xml XmlParser XmlSlurper Json 的处理 创建 Json 解析 Json 摘要 MarkupBuilder,StreamingMarkupBuilder,XmlParser,XmlSlurper,JsonBuilder Xml 及 Json 的处
目录
摘要
Xml 及 Json 的处理Xml 的处理创建 XmlMarkupBuilderdef sw = new StringWriter()
def xml = new MarkupBuilder(sw)
xml.langs(type: "current") {
language("Java")
language("Groovy")
language("JavaScript")
}
生成结果 <langs type='current'>
<language>Java</language>
<language>Groovy</language>
<language>JavaScript</language>
</langs>
StreamingMarkupBuilder比 MarkupBuilder 更强大,支持 CDATA,命名空间等的创建 def comment = "<![CDATA[<!-- address is new to this release -->]]>"
builder = new StreamingMarkupBuilder()
builder.encoding = "UTF-8"
def person = {
mkp.xmlDeclaration()
mkp.pi("xml-stylesheet": "type='text/xsl' href='myfile.xslt'")
mkp.declareNamespace('': 'http://myDefaultNamespace')
mkp.declareNamespace('location': 'http://someOtherNamespace')
person(id: 100) {
firstname("Jane")
lastname("Doe")
mkp.yieldUnescaped(comment)
location.address("123 Main")
}
}
def writer = new FileWriter("person.xml")
writer << builder.bind(person)
生成结果 <?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type='text/xsl' href='myfile.xslt'?>
<person id='100' xmlns='http://myDefaultNamespace' xmlns:location='http://someOtherNamespace'>
<firstname>Jane</firstname>
<lastname>Doe</lastname><![CDATA[<!-- address is new to this release -->]]>
<location:address>123 Main</location:address>
</person>
解析 XmlXmlParser从文件中解析 def langs = new XmlParser().parse("langs.xml")
println "type = ${langs.attribute("type")}" //type = current
langs.language.each {
println it.text()
}
从字符串中解析 def xml = """
<langs type='current' count='3' mainstream='true'>
<language flavor='static' version='1.5'>Java</language>
<language flavor='dynamic' version='1.6.0'>Groovy</language>
<language flavor='dynamic' version='1.9'>JavaScript</language>
</langs>
"""
langs = new XmlParser().parseText(xml)
println langs.attribute("count")
langs.language.each {
println it.text()
}
XmlSlurper更为强大,支持类似 XPATH 的语法 def langs = new XmlSlurper().parseText(xml)
println langs.@count
langs.language.each {
println it
}
println langs.language[1].@flavor //dynamic
Json 的处理创建 Json只含有 JsonObject def json = new JsonBuilder()
json.call {
results {
result("x")
result("y")
}
}
println(json.toPrettyString())
{
"results": { "result": "y" } }
含有 JsonArray def list = [
[code: "111",value: "222"],[code: "333",value: "444"]
]
def builder = new JsonBuilder(list)
println builder.toPrettyString()
[
{
"code": "111","value": "222" },{
"code": "333","value": "444" }
]
混合 JsonObject 和 JsonArray def root = new JsonBuilder()
root {
data(
list.collect {
[
code : it.code,value: it.value
]
}
)
}
println root.toPrettyString()
{
"data": [ { "code": "111",{ "code": "333","value": "444" } ] }
解析 Jsondef json = """ { "data": [ { "code": "111","value": "222" },{ "code": "333","value": "444" } ] } """
def data = new JsonSlurper().parseText(json)
println data.data[0].code //111
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |