繁体   English   中英

从POGO获取XML或JSON表示形式

[英]Get XML or JSON Representation from POGO

groovy中是否可以通过某种方式获取该POGO的XML或JSON表示,类似于通过注释POJO在JAVA中可以得到的表示形式?

例:

下面的POGO需要在运行时转换为JSON或XML

class User {
   String name
   String address
} 

我尝试了JSONBuilder ,但是找不到任何可以将其转换为XML的东西。

作为@cfrick注释,您的Java库和注释很可能也适用于POGO(您是否使用JAXB?)。

无论如何,对于JSON输出,您可以使用JSONBuilder

class User {
   String name
   String address
}

def user = new User(name: 'John', address: 'Bake St.')
println new JsonBuilder(user).toPrettyString()
---
{
    "address": "Bake St.",
    "name": "John"
}

有关XML的快速解决方案,可以使用XStream

@Grapes(
    @Grab(group='com.thoughtworks.xstream', module='xstream', version='1.4.7')
)

import com.thoughtworks.xstream.*

[...]    

def xstream = new XStream()
println xstream.toXML(user)
---
<User>
  <name>John</name>
  <address>Bake St.</address>
</User>

如果您想要对JSON和XML进行“通用”处理,则可以使用groovy的构建器机制,将带有嵌套方法调用的闭包和嵌套闭包传递给构建器:

def userC = { 
    name('Kevin')
    address('Train St.')
}

def json = new JsonBuilder()
json userC
println json.toPrettyString()

def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.'User' userC
println writer.toString()
---
{
    "name": "Kevin",
    "address": "Train St."
}
<User>
  <name>Kevin</name>
  <address>Train St.</address>
</User>

或使用StaxBuilder (可与Stax处理器配合使用的构建器)。 使用jettison ,您可以以某种方式统一JSON和XML处理:

@Grapes(
    @Grab(group='org.codehaus.jettison', module='jettison', version='1.3.7')
)

import javax.xml.stream.XMLOutputFactory
import javax.xml.stream.XMLStreamException

import groovy.json.*
import groovy.xml.*

import org.codehaus.jettison.mapped.*

def userC = { 
    name('Kevin')
    address('Train St.')
}

[...]

def factory = XMLOutputFactory.newInstance()
writer = new StringWriter()
def stax = new StaxBuilder(factory.createXMLStreamWriter(writer))
stax.'User' userC
println writer.toString()

def conv = new MappedNamespaceConvention()
writer = new StringWriter()
def mappedWriter = new MappedXMLStreamWriter(conv, writer)
staxJson = new StaxBuilder(mappedWriter)
staxJson.'User' userC
println writer.toString()
---
<?xml version="1.0" ?><User><name>Kevin</name><address>Train St.</address></User>
{"User":{"name":"Kevin","address":"Train St."}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM