当前位置: 首页 > 知识库问答 >
问题:

JSON和杰克逊

锺离韬
2023-03-14

我如何告诉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中处理它。

对此有什么变通方法吗?

谢谢你的时间。

共有3个答案

沈旻
2023-03-14

您可以尝试jackson本身,方法是如下设置注释内参

公共类测试{

    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;
        }
    }

}
单于旭东
2023-03-14

实际上,以下内容与杰克逊本身一起工作:

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方法之上。

多谢了。

鲁钱明
2023-03-14

您可以尝试gensonhttp://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;
     }
 }
 类似资料:
  • 首先,我不熟悉Jython。我正在寻找一种将python代码集成到Java项目中的方法。因此我正在调查Jython。 我正在尝试将一个 json 字符串转换为 Java 对象 - 在 python 中。 首先,我一直在努力让Jython找到我的java类。由于缺乏更优雅的解决方案,我可以通过简单地执行以下操作来向前迈进: 无论如何。。。 我正在尝试以下操作: 但是,在运行时,我收到以下错误: 我不

  • 我还在学习如何使用Jackson。。。 所以我有一个JSON对象,它的值有时是整数、长字符串或列表 值:整数 值:字符串 价值:列表 所以总的来说。。。 这是我的POJO模型 这是我的映射器代码 问题是,当我执行代码时,出现以下错误: 我很清楚,之所以会发生这种情况,是因为“value”可以包含三种不同类型中的一种,我如何使代码足够灵活以适应这些类型。。。我总是可以在其他方法中检测值是int、Li

  • 有没有办法让Jackson序列化某个流对象(并在之后关闭)?这样地: 使现代化 澄清:我想流式传输内容,而不仅仅是将其序列化到单个String对象。

  • 我想使用Spring的RestTemplate plus Jackson来使用Web服务。我已经学习了几本教程,并且已经达到了创建DAO的目的。这是我获取所有域对象的方法: 但我的Web服务不会立即返回Station对象数组,而是以这种方式返回一个更具语义的表达式: 所以我的问题是,我不知道如何“告诉”RestTemplate在“stations”指示符之后立即解析对象列表,而不创建临时对象,这似

  • 问题内容: 我有以下json文件: 但是java模型如下: Jackson解析时会引发异常,因为“ externalId”字段没有getter或setter方法。有没有可以用来忽略json字段的装饰器? 问题答案: 您可以使用注释;如果这只是您要跳过的一个值,则类似于: 或忽略任何无法使用的东西: 还有其他方法可以做到这一点,其余的请查看FasterXML Jackson wiki 。

  • 问题内容: 我有一个特定的JSON节点,它对应于导入org.codehaus.jackson.JsonNode,而不是导入org.codehaus.jackson.map.JsonNode。 我想从上述数组的所有JSON节点中删除“ familyName”和“ middleName”。有什么办法可以做到这一点? 问题答案: 我还没有测试过,但是我认为这样可以满足您的需求: 您还可以使用Jackon