我有这堂课:
class A {
@XmlElement(name = "bees")
@XmlElementWrapper(name="bee")
public List<B> bees;
}
然后我的XML看起来像:
<a>
<bees>
<bee>...</bee>
<bee>...</bee>
</bees>
</a>
但是当通过JSON使用时:
{
"bees": {
"bee": [
....
]
}
}
我需要:
{
"bees": {
"bee": { .. }, "bee": { .. }, ..
}
}
任何人都可以帮忙吗?
答案 0 :(得分:3)
注意:我是EclipseLink JAXB (MOXy)主管,是JAXB (JSR-222)专家组的成员。
而不是:
{
"bees": {
"bee": { .. },
"bee": { .. },
..
}
}
我会推荐以下内容:
{
"bees" : [
{ .. },
{ .. },
..
} ]
}
下面是如何使用MOXy根据您的映射生成此JSON:
import java.util.*;
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;
import org.eclipse.persistence.jaxb.JAXBContextProperties;
import org.eclipse.persistence.jaxb.MarshallerProperties;
public class Demo {
public static void main(String[] args) throws Exception {
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(JAXBContextProperties.JSON_INCLUDE_ROOT, false);
properties.put(JAXBContextProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);
JAXBContext jc = JAXBContext.newInstance(new Class[] {A.class}, properties);
Unmarshaller unmarshaller = jc.createUnmarshaller();
StreamSource xml = new StreamSource("src/forum19560166/input.xml");
A a = unmarshaller.unmarshal(xml, A.class).getValue();
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
marshaller.marshal(a, System.out);
}
}
了解更多信息
答案 1 :(得分:1)
使用此tools;我遇到了您所描述的相同问题。我们用来解决这个问题的解决方案是将我们的Maven依赖从Jackson更改为json-lib。我们将此网站用作guide:
如果使用maven,为你的pom添加依赖关系。
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.3</version>
<type>jar</type>
<classifier>jdk15</classifier>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>xom</groupId>
<artifactId>xom</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
将此xml保存在示例文件sample-xml.xml
中 <?xml version="1.0" encoding="UTF-8"?>
<important-data certified="true" processed="true">
<timestamp>232423423423</timestamp>
<authors>
<author>
<firstName>Tim</firstName>
<lastName>Leary</lastName>
</author>
</authors>
<title>Flashbacks</title>
<shippingWeight>1.4 pounds</shippingWeight>
<isbn>978-0874778700</isbn>
</important-data>
主要课程
package com.discursive.answers;
import java.io.InputStream;
import net.sf.json.JSON;
import net.sf.json.xml.XMLSerializer;
import org.apache.commons.io.IOUtils;
public class ConvertXMLtoJSON {
public static void main(String[] args) throws Exception {
InputStream is =
ConvertXMLtoJSON.class.getResourceAsStream("sample-xml.xml");
String xml = IOUtils.toString(is);
XMLSerializer xmlSerializer = new XMLSerializer();
JSON json = xmlSerializer.read( xml );
System.out.println( json.toString(2) );
}
}
结果
{
"@certified": "true",
"@processed": "true",
"timestamp": "232423423423",
"authors": [ {
"firstName": "Tim",
"lastName": "Leary"
}],
"title": "Flashbacks",
"shippingWeight": "1.4 pounds",
"isbn": "978-0874778700"
}
答案 2 :(得分:0)
以类似的结尾:
public class BeeDetails
{
public string details { get; set; }
}
public class Bee
{
public BeeDetails { get; set; }
}
public class BeeResponse
{
public List<Bee> Bees { get; set; }
}
得到这个:
{
"bees": {
"bee": { .. }, "bee": { .. }, ..
}