java - 如何仅获取 JSON 对象的 ID 列表?

标签 java json rest

我有一些问题。我从 RESTful Web 服务获得响应,其中包含列表中的 JSON 对象。例如:

我得到了这些元素的列表,我只想从 benutzerId 中获取 id。

[{
  "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 对象,其中该对象中只有 id,因为我不想将整个数据发送给请求者。

[{
  "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();
    }
}

最佳答案

使用 JsonPath 评估器,例如 Jayway Jsonpath。 https://mvnrepository.com/artifact/com.jayway.jsonpath/json-path

你的 json 路径可以是这样的

$[*]['benutzerId'].id

这会生成类似的输出 [ 1、 2 ]

你可以在线尝试https://jsonpath.herokuapp.com

关于java - 如何仅获取 JSON 对象的 ID 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43357060/

相关文章:

java - 类型已知,但方法指的是缺失的类型

java - 在JAVA中读取JSON格式的字符串

json - 使用jq提取多个字段并新建对象

java - 如何通过Bamboo API获取计划中测试的统计信息

java - 如何使用java在Rest Web服务中下载不同类型的文件

java - 如何在 BST 中调用检索方法

java - Android If 语句不起作用

json - RESTful 有那么重要吗?

java - 为什么 iterator.next() 每次都返回相同的项目?

javascript - Backbone.js 的延迟 JSON 响应