所以我真的很困惑,所以希望我所要求的是有道理的。我应该注意这是作业,但我只是在一小部分寻求帮助。
以下是我的数据类的简化版和通用版:
@XmlRootElement(name="item")
@XmlType(propOrder={"name", "value"})
public class Item {
private String name;
private int value;
@XmlElement(name="name")
public String getName() {
return name;
}
@XmlElement(name="value")
public int getValue() {
return value;
}
}
和
@XmlRootElement(name="itemcontainer")
@XmlType(propOrder={ "name", "items"})
public class ItemContainer {
private String name;
private ArrayList<Item> items;
@XmlElement(name="name")
public String getName() {
return name;
}
@XmlElement(name="items")
public ArrayList<Item> getItem() {
return item;
}
}
我需要做的是在JSON之间来回转换ItemContainer对象以存储在MongoDB数据库中。 (必须是MongoDB)
据我所知,ArrayLists无法编组。
我最终需要做的是从MongoDB数据库中读取,将JSON解组为Java对象,对这些对象执行操作,然后将它们编组回JSON以存储在数据库中。
我需要更改或做什么才能让我在JSON和ItemContainer之间进行转换?
答案 0 :(得分:1)
注意:我是EclipseLink JAXB (MOXy)主管,是JAXB (JSR-222)专家组的成员。
以下是如何使用MOXy的JSON绑定支持您的用例。
<强>富强>
以下是我们将用于此示例的Java模型。
public class Foo {
private String bar;
public String getBar() {
return bar;
}
public void setBar(String bar) {
this.bar = bar;
}
}
<强> jaxb.properties 强>
要将MOXy指定为JAXB提供程序,您需要包含一个名为jaxb.properties
的文件,该文件在与您的域模型相同的包中包含以下内容(请参阅:http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html)
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
<强>演示强>
import java.util.*;
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;
import org.eclipse.persistence.jaxb.JAXBContextProperties;
public class Demo {
public static void main(String[] args) throws Exception {
Map<String, Object> properties = new HashMap<String, Object>(2);
properties.put(JAXBContextProperties.MEDIA_TYPE, "application/json");
properties.put(JAXBContextProperties.JSON_INCLUDE_ROOT, false);
JAXBContext jc = JAXBContext.newInstance(new Class[] {Foo.class}, properties);
Unmarshaller unmarshaller = jc.createUnmarshaller();
StreamSource json = new StreamSource("src/forum15728638/input.json");
List<Foo> foos = (List<Foo>) unmarshaller.unmarshal(json, Foo.class).getValue();
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(foos, System.out);
}
}
<强> input.json /输出强>
[ {
"bar" : "Hello"
}, {
"bar" : "World"
} ]
了解更多信息