获得XML数据后,如何解析它并转换为JSON?

| 在Jersey RESTful框架工作中,我知道可以在客户端中获取xml数据,如下所示:
private static final String BaseURI = \"http://DOMAN.com\";

ClientConfig config = new DefaultClientConfig();

Client client = Client.create(config);

WebResource service = client.resource(BaseURI);

String xmlData = service.path(\"rest\").path(\"todos\").accept(
                MediaType.APPLICATION_XML).get(String.class)
我的问题是我该如何解析
xmlData
?我想从ѭ1中获取所需的数据,并将所需的数据传输到JSON,实现此目的的最佳方法是什么?     
已邀请:
通常,如果不需要,永远不要将XML直接转换为JSON(反之亦然)。 而是将数据从XML或JSON绑定到POJO,然后进行其他转换。尽管看起来不太直观,但这会带来更清晰的结果并减少了问题,因为POJO和数据格式之间的转换具有更多的选择,成熟的,精心设计的库。和POJO更易于配置(带有批注),并具有更多元数据来指导转换过程。 直接转换库(例如Jettison,请参见下文)遇到各种问题。通常会产生\“ franken-JSON \”,这是技术上正确的JSON,但由于转换需要添加结构而显得与众不同。 如果是泽西岛,则使用JAXB将XML与POJO进行双向通信,而将Jackson用于JSON。无论如何,这些都是泽西岛使用的图书馆;直接使用非常容易。 如果您绝对坚持直接转换,可以尝试Jettison,但如果需要,可以准备使用List,数组和Maps解决问题(特别是单元素数组-XML数组存在问题,并且自动转换经常出错)。     
如果您的服务尚未提供JSON作为选项(将MediaType.APPLICATION_XML更改为MediaType.APPLICATION_JSON会发生什么情况?),那么我相信您有几个选项,我会按自己的喜好顺序列出。 选项1:您拥有数据的XML模式 如果您具有用于返回的XML的XML模式,则可以使用xjc生成带JAXB注释的java类,然后利用jackson将实例转换为JSON数据。我认为通过利用这些库自己进行解析,可以使您快速入门。 Jackson是一个功能强大的库,被glassfish用于实现Jersey(JAX-RS)的实现,我认为依赖此库没有任何风险。 选项2:使用json.org库,但是该库与基于反射的方法等有关,我遇到了重大问题。也就是说,它可能对您很有效...而且您可以进行相对测试轻松查看它是否满足您的要求。如果是这样,您就完成了! =) 选项3:您没有XML模式和/或想要更多控制权 正如@Falcon指出的那样,您始终可以使用传统的XML解析技术将XML解析为所需的任何内容。我偏爱SAX解析,但是DOM可以工作,具体取决于xml端 问候, 史蒂夫     
最简单,最简单的方法是使用org.json包:http://json.org/javadoc/org/json/XML.html
XML.toJSONObject(xmlData).toString()
只需在必要的import语句之外一行就可以完成所有操作。 既然我已经提到了org.json库,很多人可能对此表示不好。记住,我说过最简单,最简单的方法,而不是最好或最高效的方法;-) 如果您使用的是maven,请添加以下依赖项:
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20090211</version>
</dependency>
    
您是否可以访问生成XML的“下级接口”?如果这样做,唯一需要做的更改是用\“ @ XmlRootElement \”注释xml对象。然后,您可以将XMLobject作为JSON传递回来,而无需任何其他代码。     
检查Jsonix。如果您具有XML模式,则可以在JavaScript中生成XML-JSON映射和解组/编组XML。与JAXB非常相似(Steve Siebert提到过),但是可以在客户端上使用。
// The PO variable provides Jsonix mappings for the purchase order test case
// Its definition will be shown in the next section

var PO = { };

// ... Declaration of Jsonix mappings for the purchase order schema ...

// First we construct a Jsonix context - a factory for unmarshaller (parser)
// and marshaller (serializer)
var context = new Jsonix.Context([ PO ]);

// Then we create an unmarshaller
var unmarshaller = context.createUnmarshaller();

// Unmarshal an object from the XML retrieved from the URL
unmarshaller.unmarshalURL(\'/org/hisrc/jsonix/samples/po/test/po-0.xml\',
    // This callback function will be provided with the result
    // of the unmarshalling
    function(result) {
        // We just check that we get the values we expect
        assertEquals(\'Alice Smith\', result.value.shipTo.name);
        assertEquals(\'Baby Monitor\', result.value.item[1].productName);
    });
    

要回复问题请先登录注册