独立JavaSE应用程序中与JAXB和Jackson的JSON绑定
我想在JavaSE独立应用程序中使用JAXB来读写Json文件。 我用下面的代码片段成功地实现了XML文件,但我不知道如何切换到Json:独立JavaSE应用程序中与JAXB和Jackson的JSON绑定,java,json,jaxb,jackson,Java,Json,Jaxb,Jackson,我想在JavaSE独立应用程序中使用JAXB来读写Json文件。 我用下面的代码片段成功地实现了XML文件,但我不知道如何切换到Json: public class Main { public static void main(String[] args) throws Exception { Book book = new Book(); book.title = "hello"; JAXBContext context = JAXBContext.newIns
public class Main {
public static void main(String[] args) throws Exception {
Book book = new Book();
book.title = "hello";
JAXBContext context = JAXBContext.newInstance(Book.class);
Marshaller marshaller = context.createMarshaller();
marshaller.marshal(book, System.out);
}
}
注:
- 性能不是问题
- Web服务/REST已脱离主题
public class Main {
public static void main(String[] args) {
Book book = new Book();
book.title = "hello";
JAXBContext context;
try {
context = JAXBContextFactory.createContext(new Class[] {Book.class}, null);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(book, System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
将导致:
{
“书”:{
“标题”:“你好”
}
}
类路径上需要org.eclipse.persistence.moxy-2.5.1.jar和org.eclipse.persistence.core-2.5.1.jar。
当我自己玩这个的时候,我遇到了:。特别是Blaise Doughan的回答非常有用。
寻找
MarshallerProperties.MEDIA_TYPE, "application/json"
查看他的更多示例。如果您愿意,可以创建一个单独的方法,就像这样非常简单(如果您已经拥有JAXB libs) 主课
import java.io.IOException;
import javax.xml.bind.JAXBException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
public class ConvertJson {
public static void main(String[] args) {
final JavaObject javaObject = new JavaObject();
javaObject.setName("Json");
javaObject.setRole("Moderator");
javaObject.setAge(28);
try {
pojo2Json(javaObject);
} catch (JAXBException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static String pojo2Json(Object obj) throws JAXBException,
JsonParseException, JsonMappingException, IOException {
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(obj);
System.out.print(jsonString);
return jsonString;
}
这是pojo
import org.codehaus.jackson.annotate.JsonProperty;
public class JavaObject{
@JsonProperty(value = "Name")
private String name;
@JsonProperty(value = "Role")
private String role;
@JsonProperty(value = "Age")
private int age;
public JavaObject(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
}您可以这样做:
public class Main {
public static void main(String[] args) throws IOException {
Book book = new Book();
book.title = "hello";
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(System.out, book);
}
}
有什么问题吗?下载Jackson(及其JAXB扩展),阅读它的文档,然后应用它。问题是,我发现的大部分内容都是针对Web应用程序的,我需要的配置部分都在引擎盖下。没有什么神奇之处:只需创建
ObjectMapper
并使用它的readValue()
和writeValue()
方法。还要注意的是,您不需要使用JAXB——JAXB是用来生成XML的(尽管也有一些IMPL可以进行某种形式的JSON输出),谢谢。我从你提到的那个人那里找到了一篇博客文章,很有效。