0

Я получаю два разных типа ответа json в двух разных сценариях из одного веб-сервиса RESTful, как разобрать следующий ответ json с Jackson ??Общий синтаксический разбор непоследовательного ответа с помощью Jackson в String или пользовательский объект

response:{ 
    result:"0" 
} 

и

response:{ 
    result :{ 
     fname: "abc", 
     lname: "xyz" 
    } 
} 
+0

'jackson' и' json' являются единственными тегами, которые вам нужны по этому вопросу, так как они в настоящее время сформулированы. –

ответ

0

Вы можете десериализации как JsonNode на минимум и сделать некоторую логику, чтобы определить правильный тип. Если вы ищете конкретное решение, добавьте еще несколько деталей к вашему вопросу. Чтобы начать, вы должны начать:

@Test 
public void testDoubleResponseType() throws IOException { 
    ImmutableList<String> jsonInputs = ImmutableList.of(
      "{\"result\": \"0\"}", 
      "{\"result\": {\"fname\": \"abc\", \"lname\": \"xyz\"}}" 
    ); 

    ObjectMapper om = new ObjectMapper(); 

    for (String jsonInput : jsonInputs) { 
     JsonNode node = om.readValue(jsonInput, JsonNode.class); 
     JsonNode result = node.get("result"); 
     if (result.isTextual()) { 
      assertEquals("0", result.asText()); 
     } else if (result.isObject()) { 
      NameResponse nameResponse = 
       om.readValue(result.toString(), NameResponse.class); 
      assertEquals(new NameResponse("abc", "xyz"), nameResponse); 
     } else { 
      fail(); 
     } 
    } 
} 

public static class NameResponse { 
    private final String fname; 
    private final String lname; 

    @JsonCreator 
    public NameResponse(@JsonProperty("fname") String fname, 
         @JsonProperty("lname") String lname) { 
     this.fname = fname; 
     this.lname = lname; 
    } 

    public String getFname() { 
     return fname; 
    } 

    public String getLname() { 
     return lname; 
    } 

    @Override 
    public boolean equals(Object o) {...} 
}