XStreamでシリアライズしています。XML には StaxDriver を使用し、JSON には JettisonMappedXmlDriver を使用します。
if (this.format == ISerializer.Format.JSON){
logger.info("json");
/* note: JsonHierarchicalStreamDriver can read Json only */
this.xstream = new XStream(new JettisonMappedXmlDriver());
}
else if (this.format == ISerializer.Format.XML){
logger.info("xml");
this.xstream = new XStream(new StaxDriver());
}
XML ではきれいな印刷が得られますが、JSON ではきれいな印刷は得られません。
public boolean toStream(Object object, Writer writer){
if(this.usePrettyPrint == true){
this.xstream.marshal(object, new PrettyPrintWriter(writer));
}else{
this.xstream.toXML(object, writer);
}
return true;
}
コードをこのままにしておくと、JSON の代わりに XML が返されます。JSON を取得するには、このようにコードを書き直さなければなりませんでしたが、きれいに印刷されていません。
public boolean toStream(Object object, Writer writer){
if (this.format == ISerializer.Format.JSON){
this.xstream.toXML(object, writer);
}
else{
if(this.usePrettyPrint == true){
this.xstream.marshal(object, new PrettyPrintWriter(writer));
}else{
this.xstream.toXML(object, writer);
}
}
return true;
}
JettisonMappedXmlDriver を使用して JSON できれいに印刷する方法を知っていますか?
XStream のドキュメントには、それに関する情報はありません。
http://x-stream.github.io/json-tutorial.html
しかし、シリアライズとデシリアライズ (JettisonMappedXmlDriver) を可能にしたい場合、XStream を使用してかなり印刷された JSON を取得する方法がないとは信じられません...
ありがとう!