注意: 我是EclipseLink JAXB (MOXy)负责人,也是JAXB (JSR-222)专家组的成员。
这个用例对于 Jackson 来说可能是不可能的,但是当 MOXy 用作您的 JSON 绑定提供程序时可以完成。
富
对于这个用例,您可以利用 MOXy 基于路径的映射。
import org.eclipse.persistence.oxm.annotations.XmlPath;
public class Foo {
private String baz;
private String qux;
@XmlPath("foo/bar/baz/text()")
public String getBaz() {
return baz;
}
public void setBaz(final String baz) {
this.baz = baz;
}
@XmlPath("foo/qux/text()")
public String getQux() {
return qux;
}
public void setQux(final String qux) {
this.qux = qux;
}
}
演示
JAXB 运行时 API 用于读取/写入 JSON。
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/forum15659950/input.json");
Foo foo = unmarshaller.unmarshal(json, Foo.class).getValue();
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(foo, System.out);
}
}
输入.json/输出
{
"foo" : {
"bar" : {
"baz" : "Hello"
},
"qux" : "World"
}
}
了解更多信息