有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java GSON/JSON如果两个属性值匹配返回对象

我希望搜索一个JSON对象数组,如果两个属性与输入的值匹配,那么我希望返回该对象。目前,如果一个属性或另一个属性匹配,我的代码将返回,而我只希望在两者匹配时返回对象

我的方法是:

 ArrayList<JsonObject> searchAttributes(String sensor, List<String> attributes, List<String> values) throws IOException {
   establishPastEventConnection(sensor);
   JsonParser jp = new JsonParser();
   JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent()));
   JsonArray rootArr = root.getAsJsonArray();
   JsonObject rootObj;
   ArrayList<JsonObject> results = new ArrayList<>();
   for (int x = 0; x < root.getAsJsonArray().size(); x++) {
     rootObj = rootArr.get(x).getAsJsonObject();
     for (String attribute : attributes) {
       for (String value : values) {
         if (rootObj.get(attribute).getAsString().equals(value)) {
               results.add(rootObj);
         }
       }
     }
   }
   return results;
 }

方法调用:

nexaConnect.searchAttributes("13619978", Arrays.asList("timeStamp", "eventCode"), Arrays.asList("1.483384638619905E9", "1"))

JSON示例:

[
  {"blobJson":"x","deviceMfg":10,"eventCode":0,"sensorClass":3,"sensorUUID":"136199","timeStamp":1.483384640123117E9,"uID":"136199_3_10"},
  {"blobJson":"x","deviceMfg":10,"eventCode":0,"sensorClass":3,"sensorUUID":"136199","timeStamp":1.483379834470379E9,"uID":"136199_3_10"},
  {"blobJson":"x","deviceMfg":10,"eventCode":0,"sensorClass":3,"sensorUUID":"136199","timeStamp":1.483384639621985E9,"uID":"136199_3_10"}
]

共 (2) 个答案

  1. # 1 楼答案

    我假设属性列表和值列表的大小相同:

    mainLoop:
       for (int x = 0; x < root.getAsJsonArray().size(); x++) {
         rootObj = rootArr.get(x).getAsJsonObject();
         for (int i = 0; i < attributes.size(); ++i) {
            String attr = attributes.get(i);
            String value = values.get(i);
            if (!rootObj.get(attr).getAsString().equals(value)) {
               continue mainLoop;
            }
          }
          results.add(rootObj);
       }
    
  2. # 2 楼答案

    只有当两个属性都与给定的输入值匹配时,才会添加对象。 最后返回ArrayList对象results

    for (int x = 0; x < root.getAsJsonArray().size(); x++) {
      rootObj = rootArr.get(x).getAsJsonObject();
       int i=0;
      for (String attribute : attributes) {
    
        for (String value : values) {
          if (rootObj.get(attribute).getAsString().equals(value)) {
               i++;
          }
        }
      }
       if(i==2){
          results.add(rootObj);
        }
    }
    return results;