如何映射@JsonProperty有可能存在多种数据类型的属性

时间:2018-06-14 11:01:57

标签: java json jackson pojo

我使用jsonProperty annonation将json值映射到pojo对象中的变量。

{
  "valueSet": [
   {
     "name": "Type_int",
     "value": 123
   },
   {
     "name": "Type_String",
     "value": "ABC"
   }
  ]
}

对于上面这个json,我使用Object类对象来捕获" value"属性值。 像

@JsonProperty("value")
private Object value;

这样可以捕获"整数"和"字符串"值。

但对于以下情况

{
   "valueSet": [
      {
        "name": "Type_int",
        "value": 123
      },
      {
        "name": "Type_String",
        "value": "ABC"
      },
      {
         "name": "Type_array",
         "value": [
            {
              "x": 0,
              "y": 0
            },
            {
              "x": 10,
              "y": 10
            },
            {
              "x": 20,
              "y": 20
            }
            ]
      }
      ]
}

"值"有三种不同的数据类型。 attribute.I不能使用Object来捕获值。那么,有没有办法捕获"值"中的所有值?属性。

2 个答案:

答案 0 :(得分:0)

试试我的运气,使用以下代码,

public class Value {

    @JsonProperty("name")
    private String name;

    @JsonProperty("value")
    private Object value;

    @JsonProperty("value")
    private ValueObject valueObject;

    //setters and getters
}

ValueSet

public class ValueSet {

    @JsonProperty("valueSet")
    private List<Value> l;

    //setters & getters
}

ValueObject

public class ValueObject {

    @JsonProperty("x")
    private int x;

    @JsonProperty("y")
    private int y;

    //setters & getters
}

测试方法

@Test
public void test() {
    String input = "{\"valueSet\":[{\"name\":\"Type_int\",\"value\":123},{\"name\":\"Type_String\",\"value\":\"ABC\"},{\"name\":\"Type_array\",\"value\":[{\"x\":0,\"y\":0},{\"x\":10,\"y\":10},{\"x\":20,\"y\":20}]}]}";
    //String input = "{\"valueSet\":[{\"name\":\"Type_int\",\"value\":123},{\"name\":\"Type_String\",\"value\":\"ABC\"}]}";
    ObjectMapper mapper = new ObjectMapper();
    try {
        ValueSet v = mapper.readValue(input, ValueSet.class);
        System.out.println(v);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

以相反的顺序输出。

ValueSet [l=[Value [name=Type_int, value=123], Value [name=Type_String, value=ABC]]]
ValueSet [l=[Value [name=Type_int, value=123], Value [name=Type_String, value=ABC], Value [name=Type_array, value=[{x=0, y=0}, {x=10, y=10}, {x=20, y=20}]]]]

添加toString()方法以查看log或控制台中的输出。不知怎的,这对我有用。不确定它是否适合你。

答案 1 :(得分:0)

<input type="range" id="rating" min="0" max="10">
<span id="output"></span>