Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
独立JavaSE应用程序中与JAXB和Jackson的JSON绑定_Java_Json_Jaxb_Jackson - Fatal编程技术网

独立JavaSE应用程序中与JAXB和Jackson的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

我想在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.newInstance(Book.class);
    Marshaller marshaller = context.createMarshaller();
    marshaller.marshal(book, System.out);
  }

}
注:

  • 性能不是问题
  • Web服务/REST已脱离主题

使用EclipseLink MOXy,您可以添加属性来操作输出

    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输出),谢谢。我从你提到的那个人那里找到了一篇博客文章,很有效。