如何将json的字段名uppercated转换为对象?

ztmd8pv5  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(114)

我有json

{
    "Person": {
        "PersonId": 122,
        "Name": "John",
        "Surname": "Doe",
        "age": 2
    }
}

字符串
我想把它转换成Java类

public class Person {
        private String personId;
        private String name;
        private String surname;
        private int age;
        
        //getters,setters...
    }


我已经试过了

@Bean
    ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.setPropertyNamingStrategy(new LowerCaseStrategy());
        return mapper;
    }

    public static class LowerCaseStrategy extends PropertyNamingStrategy.PropertyNamingStrategyBase {
        @Override
        public String translate(String input) {
            char[] chars = input.toCharArray();
            chars[0] = Character.toLowerCase(chars[0]);
            return new String(chars);
        }
    }


但这并没有帮助。
有人知道如何解决这个问题吗?
upd:我没有权限更改Person类。

tzdcorbm

tzdcorbm1#

你就快成功了。你犯的一个错误是PropertyNamingStrategy应用的方向:您正在将 * 从 * Java名称 * 转换为 * JSON名称,而不是相反。所以,这应该起作用:

@Override
        public String translate(String input) {
            char[] chars = input.toCharArray();
            chars[0] = Character.toUpperCase(chars[0]); // upper!
            return new String(chars);
        }

字符串
此外,Jackson有PropertyNamingStrategies.UPPER_CAMEL_CASE,它应该做你需要的事情,而不需要实现你自己的。

hmtdttj4

hmtdttj42#

要将具有uppercated字段名称的JSON转换为所需的Java类,可以使用Jackson库中的@JsonProperty注解。下面是如何修改Person类和ObjectMapper配置来实现转换:
1.修改Person类以使用@JsonProperty注解:

public class Person {
    @JsonProperty("PersonId")
    private String personId;
    
    @JsonProperty("Name")
    private String name;
    
    @JsonProperty("Surname")
    private String surname;
    
    @JsonProperty("age")
    private int age;

    // Getters and setters...
}

字符串
1.从ObjectMapper配置中删除自定义LowerCaseStrategy,因为JSON中的字段名称已经是小写的。

@Bean
public ObjectMapper objectMapper() {
    return new ObjectMapper();
}


现在,当您使用更新的ObjectMapper反序列化JSON时,它将正确地将具有uppercepted名称的字段Map到Person类中的相应字段。
举例来说:

String jsonString = "{\"Person\":{\"PersonId\":122,\"Name\":\"John\",\"Surname\":\"Doe\",\"age\":2}}";

ObjectMapper objectMapper = new ObjectMapper();
Person person = objectMapper.readValue(jsonString, Person.class);

System.out.println(person.getPersonId()); // Output: 122
System.out.println(person.getName()); // Output: John
System.out.println(person.getSurname()); // Output: Doe
System.out.println(person.getAge()); // Output: 2


通过这些更改,具有uppercated字段名称的JSON将被正确地转换为Java Person对象。

相关问题