/ / Jackson Json Object Mapper: Wie kann ich ein Array zuordnen? - Json, Frühling, Ruhe, Jackson, Datamapper

Jackson Json Object Mapper: Wie kann ich ein Array zuordnen? - Json, Frühling, Ruhe, Jackson, Datamapper

Ich versuche, ein Array aus einem Backend-API-Aufruf abzubilden. Wie kann ich diese Daten mit dem Wissen zuordnen:

Die folgenden Klassen werden zum Speichern der Json-Array-Daten verwendet:

    @Data
private static class UserListBean {
private List<UserBean> userList;
}

@Data
private static class UserBean {
private String id;
private String userName;
private String password;
}

Der Json hat das folgende Format (das folgende Beispiel enthält nur ein Element):

[
{
"id":1,
"userName":"bob",
"password":"403437d5c3f70b1329f37a9ecce02adbbf3e986"
}
]

Ich benutze Jackson und habe bisher Folgendes ausprobiert, aber es sendet mir immer wieder eine Ausnahme

        final ObjectMapper mapper = new ObjectMapper();
mapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
final ObjectReader reader = mapper.reader(UserListBean.class);
GeoHubAccountListBean accounts = null;

try {
accounts = reader.readValue(jsonString);
} catch (final IOException ex) {
log.error("Cannot convert JSON into a list of users", ex);
}

Hier das final ObjectReader reader = mapper.reader (UserListBean.class); löst eine Ausnahme aus

Can not deserialize instance of com.xxx.XXX$UserListBean out of START_ARRAY token

Irgendeine Idee ?

Vielen Dank

Antworten:

3 für die Antwort № 1

Nun, wenn Sie versuchen, Json zu einem Objekt des Typs zu deserialisieren UserListBeanDann müssen Sie ein JSONObject deserialisieren (Java-Objekte werden normalerweise zu JSONObjects zugeordnet).

Daher sollte Ihr äußerster Json-Konstrukt ein Objekt sein. Ihr äußerster Json-Konstrukt ist ein JSONArray.

Ihre UserListBean hat ein einzelnes Feld, welches a ist List<UserBean>. Daher sollte Ihr Json-Konstrukt der obersten Ebene (das ein JSONObject ist) ein einzelnes Feld mit dem Namen "userList" mit einem Wert enthalten, der ein JSONArray ist (Java Collections tendieren dazu, JSONArrays zuzuordnen).

Ich denke, das ist der json, nach dem Sie suchen:

{
"userList":[
{
"id":1,
"userName":"bob",
"password":"403437d5c3f70b1329f37a9ecce02adbbf3e986"
}
]
}

Wenn Sie keine Kontrolle über den eingehenden Json haben, möchten Sie wahrscheinlich das übergeordnete Objekt abschneiden UserListBean und direkt mit der List<UserBean>, da das mit dem von Ihnen bereitgestellten Json funktionieren würde.


0 für die Antwort № 2

Versuchen Sie etwas wie das Folgende:

public static <T> T mapFromJson(String json, Class<T> clazz) throws JsonParseException, JsonMappingException, IOException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
return objectMapper.readValue(json, clazz);
}

public static void main(String[] args) throws IOException {
HeaVO HeaVO=new HearVO();
HeaVO.setId("Id");
List<HeaVO> listVO=new ArrayList<HeaVO>();
listVO.add(HeaVO);

List<HeaVO> listHeaVORes=Arrays.asList(mapFromJson(mapToJson(listHeaVO), HeaVO[].class));
System.out.println(((HeaVO)listVORes.get(0)).getId());
}