gpt4 book ai didi

java - 使用 XStream 将对象转换为 JSON

转载 作者:行者123 更新时间:2023-12-01 23:36:12 26 4
gpt4 key购买 nike

我需要将 Java 对象转换为 JSON 字符串。这是我使用的示例代码:

public class XstreamTest {

public static void main(String[] args) throws Exception {
Order order = new Order();
order.id = 1;
order.products = new ArrayList<Product>();

Product prod1 = new Product();
prod1.barCode = "4821111111111";
Product prod2 = new Product();
prod2.barCode = "4821111111112";

order.products.add(prod1);
order.products.add(prod2);

System.out.println(toJson(order));

}

public static String toJson(Object document) throws Exception {
XStream xstream = new XStream(new JettisonMappedXmlDriver() {
public HierarchicalStreamWriter createWriter(Writer writer) {
return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);
}
});
xstream.autodetectAnnotations(true);
xstream.setMode(XStream.NO_REFERENCES);
xstream.alias(document.getClass().getSimpleName(),
document.getClass());
return xstream.toXML(document);
}

}

@XStreamAlias("ORDER")
class Order {
@XStreamAlias("NUMBER")
public int id;

@XStreamAlias("PRODUCT")
@XStreamImplicit(itemFieldName="PRODUCT")
public List<Product> products;
}

class Product {
@XStreamAlias("BARCODE")
public String barCode;
}

运行后,我得到结果:

{
"NUMBER": 1,
"PRODUCT": {
"BARCODE": "4821111111111"
},
"PRODUCT": {
"BARCODE": "4821111111112"
}
}

我检查 http://www.jslint.com/ 上的 json并收到错误:重复的“产品”。

请帮忙!我做错了什么?或者可能是 XStream 中的错误?

最佳答案

只需从 Order 类的 products 字段中删除注释 @XStreamImplicit(itemFieldName="PRODUCT") 即可。这指示 XStream 将您的集合序列化为隐式集合,这意味着集合将没有根对象,并且其所有元素将单独序列化并包含在以其名称调用的对象中。集合(产品)。这会产生一个 JSON 对象,该对象具有多个同名属性 (PRODUCT),这是无效的。

顺便说一下,XStream 最初是用来序列化 XML 的,您可以尝试使用专用的 JSON 序列化器库,GSON例如。

更新

由于您使用相同的 POJO 来反序列化 XML,并且删除提到的注释会破坏 XML 反序列化,因此您必须“手动”配置 XStream,以便它可以在 XML 反序列化期间处理隐式集合:

xstream.addImplicitCollection(Order.class, "products", "PRODUCT", Product.class);

这与注释具有相同的效果,只不过它仅适用于反序列化。

关于java - 使用 XStream 将对象转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18641774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com