Как получить только список идентификаторов объектов 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/

Другие вопросы по тегам