【问题标题】:Model class for Jackson Parser to parse Uppercase propertiesJackson Parser 解析大写属性的模型类
【发布时间】:2013-05-22 05:19:19
【问题描述】:

我有一个如下所示的 json 文件:

{
    "ANIMALS": {
    "TYPE": "MAMMAL",
    "COLOR": "BLACK",
    "HEIGHT": "45",

    }
}

但我得到属性未找到错误。如果我将其更改为动物(小写)。它工作正常。谁能建议我这个示例 json 文件的模型类,它将被正确解析。

【问题讨论】:

    标签: android json parsing jackson


    【解决方案1】:

    根据 Deepak 的回答,根据您配置 Jackson 的方式,您可能需要将 @JsonProperty 放在 getter 和 setter 而不是属性上,否则您可能会在生成的 JSON。

    例子

     @JsonProperty("ANIMALS")
     private string animals;
    

    结果...{animals:"foo",ANIMALS:"foo"}

     private string animals;
    
     @JsonProperty("ANIMALS")
     public String getAnimals(){...}
    

    结果...{ANIMALS:"foo"}

    【讨论】:

    • 你说得对,我在getter方法上加注后,它只产生大写的...谢谢
    • 非常感谢。你拯救了我的一天
    【解决方案2】:

    您应该为您的案例实施新的命名策略:

    class UpperCaseNamingStrategy extends PropertyNamingStrategy.PropertyNamingStrategyBase {
    
        private static final long serialVersionUID = 1L;
    
        @Override
        public String translate(String arg0) {
            return arg0.toUpperCase();
        }
    }
    

    之后,配置ObjectMapper

    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.setPropertyNamingStrategy(new UpperCaseNamingStrategy());
    

    另见@JsonProperty注解。

    【讨论】:

    • 感谢您的回答。我使用@JsonProperty 注释解决了这个问题。在那之后看到了你的答案,但既然你给出了正确的答案,我会接受它。 :)
    • 谢谢!只是一个问题....当它用于处理 大写 变量时,你为什么称它为LowerCaseNamingStrategy? :)
    • @AdamBurley,很好,我把名字改成了Upper...。不知道为什么7年前我把它命名为Lower...,可能是因为我扩展了LowerCaseWithUnderscoresStrategy,只是复制了这个名字。
    • 别担心!其实我觉得扩展PropertyNamingStrategy.PropertyNamingStrategyBase就可以了;我认为扩展 LowerCaseWithUnderscoresStrategy 没有任何好处...
    • @AdamBurley,已修复,感谢您的建议。
    【解决方案3】:

    感谢我使用 @JsonProperty 注释解决了这个问题

        @JsonProperty("ANIMALS")
        private string animals;
    

    【讨论】:

      【解决方案4】:

      如果您不生成 JSON(序列化),但您想使用对象而不必关心大小写。

      您可以收到动物或动物:

      ObjectMapper mapper = new ObjectMapper();
      mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);    
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 2017-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多