JSON and Jackson



我如何告诉杰克逊忽略JSON名称?

我有以下pojo:

class MyPojo {
   private String ABCName;
}

当我有:

" abcname":" foo",那么杰克逊不认识到它会引发错误。

它的期望是:

" abcname":" foo"。

代码:

import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.ObjectMapper;
    public class TestJackson {
        public static void main(String args[]) throws Exception {
            ObjectMapper mapper = new ObjectMapper();
            MyPojo my = new MyPojo();
            my.setABCName("Foo");
            System.out.println(mapper.writeValueAsString(my));
        }
        private static class MyPojo {

            private String ABCName;
            public void setABCName(String ABCName) {
                this.ABCName = ABCName;
            }
            public String getABCName() {
                return ABCName;
            }
        }
    }

输出:{" abcname":" foo"}

然后,我尝试使用:@jsonproperty(" abcname")

尝试注释abcname

我注释并运行了代码后,这就是我得到的:{" abcname":" foo"," abcname":" foo"}

它导致重复。

我有一个JSON客户端,它将发送为:" abcname":" foo",我需要在杰克逊(Jackson)进行处理。

有任何解决方法吗?

感谢您的时间。

您可以尝试Genson http://code.google.com/p/genson/。以下代码应产生您期望的结果。

String json = "{"ABCName" : "foo"}";
MyPojo my = new MyPojo();
my.setABCName("Foo");
Genson genson = new Genson();
System.out.println(genson.serialize(my));
System.out.println(genson.deserialize(json, MyPojo.class).ABCName);
 public static class MyPojo {
     private String ABCName;
     public void setABCName(String ABCName) {
         this.ABCName = ABCName;
     }
     @JsonProperty("ABCName") public String getABCName() {
         return ABCName;
     }
 }

实际上与杰克逊本身一起使用:

public class MyPojo {
     private String ABCName;
     public void setABCName(String ABCName) {
         this.ABCName = ABCName;
     }
     @JsonProperty("ABCName") 
public String getABCName() {
         return ABCName;
     }
 }

结果:{" abcname":" foo"}

但是,当您注释该字段时,它会导致重复项,这意味着以下内容没有起作用:

public class MyPojo {
         @JsonProperty("ABCName") 
         private String ABCName;
         public void setABCName(String ABCName) {
             this.ABCName = ABCName;
         }

    public String getABCName() {
             return ABCName;
         }
     }

结果:{" abcname":" foo"," abcname":" foo"}

看来注释必须高于getter方法。

非常感谢。

您可以通过以下方式设置注释Intospector

来尝试杰克逊本身

公共类TestJackson {

    public static void main(String args[]) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
        mapper.setAnnotationIntrospector(introspector);
        MyPojo my = new MyPojo();
        my.setABCName("Foo");
        System.out.println(mapper.writeValueAsString(my));
    }
    private static class MyPojo {
        @JsonProperty("ABCName")
        private String ABCName;
        public void setABCName(String ABCName) {
            this.ABCName = ABCName;
        }
        public String getABCName() {
            return ABCName;
        }
    }
}

最新更新