java对象的动态json字符串

lf3rwulv  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(407)

这个问题在这里已经有答案了

具有未知动态属性的jackson反序列化(2个答案)
上个月关门了。
如何将这个具有动态属性的json字符串Map到java对象?

  1. {
  2. 'name' : 'John',
  3. 'lastname': 'Doe',
  4. 'dynamicProperty1': { 'label' : 'size', 'value': 'large'},
  5. 'dynamicProperty2': { 'label' : 'color', 'value': 'blue'},
  6. 'dynamicProperty3': { 'label' : 'height', 'value': 200},
  7. 'dynamicProperty...': { 'label' : 'points', 'value': 300}
  8. }
ne5o7dgx

ne5o7dgx1#

您可以实现一个java类来保存name、lastname和hashmaps来存储动态属性。示例-

  1. public class Person {
  2. String name;
  3. String lastName;
  4. Map<String,Object> dynamicProperty1;
  5. Map<String,Object> dynamicProperty2;
  6. Map<String,Object> dynamicProperty3;
  7. }

或者,如果您有数量可变的动态属性Map(如注解中所建议的),您可以执行以下操作

  1. public class Person {
  2. String name;
  3. String lastName;
  4. Map<String,Map<String, Object>> dynamicPropertyMaps;
  5. }

然后在mapper类中,可以基于json中的值创建hashmaps,并将它们放入dynamicpropertymapsMap中。

展开查看全部
cnjp1d6j

cnjp1d6j2#

你可以用 JsonAnySetter 注解:

  1. import com.fasterxml.jackson.annotation.JsonAnySetter;
  2. import com.fasterxml.jackson.annotation.JsonProperty;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. import lombok.Data;
  5. import java.io.File;
  6. import java.io.IOException;
  7. import java.util.LinkedHashMap;
  8. import java.util.Map;
  9. public class HandleDynamicKeysInJsonApp {
  10. public static void main(String[] args) throws IOException {
  11. File jsonFile = new File("./resource/test.json").getAbsoluteFile();
  12. ObjectMapper mapper = new ObjectMapper();
  13. Person person = mapper.readValue(jsonFile, Person.class);
  14. System.out.println(person);
  15. }
  16. }
  17. @Data
  18. class Person {
  19. private String name;
  20. @JsonProperty("lastname")
  21. private String lastName;
  22. private Map<String, Label> labels = new LinkedHashMap<>();
  23. @JsonAnySetter
  24. public void addDynamicProperties(String key, Label label) {
  25. labels.put(key, label);
  26. }
  27. }
  28. @Data
  29. class Label {
  30. private String label;
  31. private Object value;
  32. }

动态特性未知的jackson反序列化
如何将任何对象序列化为uri?
如何将json反序列化为一个java类,该类具有已知的强制字段,但可以具有多个未知字段?

展开查看全部

相关问题