【问题标题】:Jackson or JAXB, which one is better for JSON? [closed]Jackson 和 JAXB,哪个更适合 JSON? [关闭]
【发布时间】:2015-03-06 09:26:41
【问题描述】:

我想知道哪个更适合 JSON、Jackson 或 JAXB。我做了一些研究,我知道(也许我错了)我们不应该使用 JAXB 来转换 JSON(一些方案问题),而另一方面 JAXB 更适合 XML。

请分享您对此的看法。

【问题讨论】:

    标签: xml json jaxb jackson


    【解决方案1】:

    正如网站上所说的JacksonFAQ:

    Jackson 是“100% JSON”,不会试图模仿或模仿 XML。属性名称映射基于标准 Java Bean 命名约定(尽管可以使用注释或自定义命名策略覆盖)。

    有一些支持兼容性功能 - 例如可选择使用 JAXB 注释的能力 - 但从根本上来说,Jackson 是一个纯 JSON/Java 数据映射器,并试图最小化 JSON 和 Java 数据模型之间的阻抗。

    它继续JacksonFaq#JAXB:

    Jackson 支持与 JAXB API (javax.xml.bin) 的某种程度的互操作性:

    在 Jackson 1.1 中,除了(或代替)核心 Jackson 注释之外,还可以使用 JAXB 注释

    JAXB API,代表 Java Architecture for XML Binding,使用 JAXB 注解将 Java 对象与 XML 文件相互转换

    在 JDK 1.8 之前,JAXB 是标准 JDK 的一部分。从 JDK 1.9 及更高版本开始,需要将 JAXB 添加为单独的库。


    这是一个测试,说 Jackson 更快,但我没有检查代码及其结果Test

    【讨论】:

    【解决方案2】:

    我使用了 Jackson 2.9.8,并且可以很好地处理 JSON 和 XML。我的投票是 Jackson 库 + Jackson-dataformat-xml.jar。看看 JSON 和 XML 的代码,这里和那里有点变化是一样的。

      /**** MainClass ****/
    
      import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
      import com.fasterxml.jackson.annotation.PropertyAccessor;
      import com.fasterxml.jackson.core.JsonProcessingException;
      import com.fasterxml.jackson.databind.ObjectMapper;
      import com.fasterxml.jackson.databind.SerializationFeature;
      import com.fasterxml.jackson.dataformat.xml.XmlMapper;
    
     public class MainClass {
    
    public static void main(String[] args) throws JsonProcessingException {
    
        // Serialization: java obj to json--> writeValueAsString
        // DeSerialization: json to java obj--> ReadValue
    
        XmlMapper mapper1 = new XmlMapper();
        ObjectMapper mapper2 = new ObjectMapper();
    
        mapper1.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
        mapper2.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
    
        mapper1.enable(SerializationFeature.INDENT_OUTPUT);
        mapper2.enable(SerializationFeature.INDENT_OUTPUT);
    
        MyPojo mypojo = new MyPojo();
        mypojo.setName("Dhani");
        mypojo.setId("18082013");
        mypojo.setAge(5);
    
        String jsonStringXML = mapper1.writeValueAsString(mypojo);
        String jsonStringJSON = mapper2.writeValueAsString(mypojo);
        // takes java class with def or customized constructors and creates JSON
    
        System.out.println("XML is " + "\n" + jsonStringXML + "\n");
        System.out.println("Json is " + "\n" + jsonStringJSON);
    }   }
    
    /***** MyPojo.java *****/
    
       import com.fasterxml.jackson.annotation.JsonIgnore;
       import com.fasterxml.jackson.annotation.JsonProperty;
       import com.fasterxml.jackson.annotation.JsonPropertyOrder;
       import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
    
      @JsonPropertyOrder({ "name", "age", "id", "note" })
      @JacksonXmlRootElement(namespace = "urn:stackify:jacksonxml", localName = "myPOJO")
       public class MyPojo {
    
    @JsonProperty("_id")
    private String id;
    
    private String name;
    
    private int age;
    
    @JsonIgnore
    private String note;
    
    public String getNote() {
        return note;
    }
    
    public void setNote(String note) {
        this.note = note;
    }
    
    public String getId() {
        return id;
    }
    
    public void setId(String id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public int getAge() {
        return age;
    }
    
    public void setAge(int age) {
        this.age = age;
    } }
    

    结果

    XML
            <myPOJO xmlns="urn:stackify:jacksonxml">
            <name xmlns="">Dhani</name>
             <age xmlns="">5</age>
             <_id xmlns="">18082013</_id>
             </myPOJO>
    
    JSON
         {
          "name" : "Dhani",
           "age" : 5,
           "_id" : "18082013"
         }
    

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多