Как получить только список идентификаторов объектов JSON?
У меня есть некоторые проблемы. Я получаю ответ от моих RESTful WebServices с объектами JSON в списке. Например:
Я получаю список этих элементов, и я хочу просто получить идентификатор из benutzerId.
[{
"benutzerId": {
"benutzername": "Nenzema",
"geschlecht": "m",
"id": 1,
"nachname": "Marinovic",
"passwort": "test1",
"vorname": "Nenad"
},
"hochzeitId": {
"id": 4
},
"id": 1,
"isbrautbenutzer": true
}, {
"benutzerId": {
"benutzername": "dnikolic",
"geschlecht": "m",
"id": 2,
"nachname": "Nikolic",
"passwort": "test2",
"vorname": "Djordje"
},
"hochzeitId": {
"id": 4
},
"id": 4,
"isbrautbenutzer": false
}]
Я уже сделал это, чтобы получить только benutzer, но я не знаю, как вернуть объект json, где только идентификатор находится в этом объекте, потому что я не хочу отправлять все данные запрашивающей стороне.
[{
"benutzername": "Nenzema",
"geschlecht": "m",
"id": 1,
"nachname": "Marinovic",
"passwort": "test1",
"vorname": "Nenad"
}, {
"benutzername": "dnikolic",
"geschlecht": "m",
"id": 2,
"nachname": "Nikolic",
"passwort": "test2",
"vorname": "Djordje"
}]
Так что моей целью было бы получить что-то вроде этого:
[{
"id": 1
}, {
"id": 2
}]
Это запрос для первого списка:
@NamedQuery(name = "Hochzeitsplan.findByBenutzerId",
query = "SELECT h FROM Hochzeitsplan h WHERE h.benutzerId.id = :benutzerId"),
Эти два запроса я тоже проверял, но это не работает..
@NamedQuery(name = "Hochzeitsplan.getHochzeitsuserByHochzeitsId",
query = "SELECT DISTINCT h.benutzerId FROM Hochzeitsplan h WHERE h.hochzeitId.id = :hochzeitId"),
@NamedQuery(name = "Hochzeitsplan.findBenutzerIdByHochzeitsId",
query = "SELECT h.benutzerId.id FROM Hochzeitsplan h WHERE h.hochzeitId.id = :hochzeitId"),
Это метод, который я использую для получения ответа со списком:
@GET
@Path("/hochzeitIDneu={hochzeitId}")
@Produces({MediaType.APPLICATION_JSON})
public Response getListByHochzeitID(@PathParam("hochzeitId") Integer hochzeitId) {
Query query=em.createNamedQuery("Hochzeitsplan.findByHochzeitId",Hochzeitsplan.class)
.setParameter("hochzeitId", hochzeitId);
List<Hochzeitsplan> a =query.getResultList();
a.sort(new Comparator<Hochzeitsplan>() {
@Override
public int compare(Hochzeitsplan o1, Hochzeitsplan o2)
{
return o1.getId().compareTo(o2.getId());
}
});
if(a.isEmpty()) {
ErrorManager error1 = new ErrorManager();
return Response.status(400).entity(error1.getError(Enums.ErrorResponses.NORESULTS)).build();
} else {
return Response.ok(a.toArray(new Hochzeitsplan[a.size()])).build();
}
}
1 ответ
Используйте JsonPath Evaluator, такой как Jayway Jsonpath. https://mvnrepository.com/artifact/com.jayway.jsonpath/json-path
Ваш путь JSON может быть что-то вроде этого
$[*]['benutzerId'].id
Это будет генерировать что-то вроде [ 1, 2 ]
Вы можете попробовать это онлайн https://jsonpath.herokuapp.com/