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

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

我有json

  1. {
  2. "Person": {
  3. "PersonId": 122,
  4. "Name": "John",
  5. "Surname": "Doe",
  6. "age": 2
  7. }
  8. }

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

  1. public class Person {
  2. private String personId;
  3. private String name;
  4. private String surname;
  5. private int age;
  6. //getters,setters...
  7. }


我已经试过了

  1. @Bean
  2. ObjectMapper objectMapper() {
  3. ObjectMapper mapper = new ObjectMapper();
  4. mapper.setPropertyNamingStrategy(new LowerCaseStrategy());
  5. return mapper;
  6. }
  7. public static class LowerCaseStrategy extends PropertyNamingStrategy.PropertyNamingStrategyBase {
  8. @Override
  9. public String translate(String input) {
  10. char[] chars = input.toCharArray();
  11. chars[0] = Character.toLowerCase(chars[0]);
  12. return new String(chars);
  13. }
  14. }


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

tzdcorbm

tzdcorbm1#

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

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

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

hmtdttj4

hmtdttj42#

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

  1. public class Person {
  2. @JsonProperty("PersonId")
  3. private String personId;
  4. @JsonProperty("Name")
  5. private String name;
  6. @JsonProperty("Surname")
  7. private String surname;
  8. @JsonProperty("age")
  9. private int age;
  10. // Getters and setters...
  11. }

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

  1. @Bean
  2. public ObjectMapper objectMapper() {
  3. return new ObjectMapper();
  4. }


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

  1. String jsonString = "{\"Person\":{\"PersonId\":122,\"Name\":\"John\",\"Surname\":\"Doe\",\"age\":2}}";
  2. ObjectMapper objectMapper = new ObjectMapper();
  3. Person person = objectMapper.readValue(jsonString, Person.class);
  4. System.out.println(person.getPersonId()); // Output: 122
  5. System.out.println(person.getName()); // Output: John
  6. System.out.println(person.getSurname()); // Output: Doe
  7. System.out.println(person.getAge()); // Output: 2


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

展开查看全部

相关问题