![](/img/trans.png)
[英]Quick way to get an NSDictionary from an XML NSData representation?
[英]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.