2

所以我真的很困惑,所以希望我的要求是有道理的。我应该注意,这是家庭作业,但我只是在一小部分寻求帮助。

以下是我的数据类的简化和通用版本:

@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 之间进行转换?

4

1 回答 1

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

jaxb.properties要将 MOXy 指定为您的 JAXB 提供程序,您需要在与域模型相同的包中包含 一个名为的文件,该文件包含以下内容(请参阅: 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);
    }

}

输入.json/输出

[ {
   "bar" : "Hello"
}, {
   "bar" : "World"
} ]

了解更多信息

于 2013-03-31T13:39:36.573 回答