Jackson vs Jaxb,对于json来说更好

时间:2015-03-06 09:26:41

标签: xml json jaxb jackson

我想知道如果json jackson vs jaxb更好的话。我做了一个研究,我知道(也许我错了)我们不应该使用jaxb转换json(一些方案问题)。另一方面,jaxb更适合xml?谢谢你的帮助

2 个答案:

答案 0 :(得分:11)

正如网站JacksonFAQ中所述:

  

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

     

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

它继续JacksonFaq#JAXB

  

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

     

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

JAXB API ,代表Java Architecture for XML Binding,使用JAXB批注将Java对象转换为XML文件/从XML文件转换

JAXB is bundled in JDK 1.6 and above所以没有必要添加任何其他罐子。

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

答案 1 :(得分:0)

我使用了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;
} }


 ***RESULT****
 XML is 
        <myPOJO xmlns="urn:stackify:jacksonxml">
        <name xmlns="">Dhani</name>
         <age xmlns="">5</age>
         <_id xmlns="">18082013</_id>
         </myPOJO>


   Json is 
     {
      "name" : "Dhani",
       "age" : 5,
       "_id" : "18082013"
         }