Преобразование HashMap в JSONArray, значения не приходят должным образом - PullRequest
0 голосов
/ 03 июля 2018

Получаю ответ от Elasticsearch с дубликатами, чтобы избежать использования Hashmap реализации и put всех значений в объекте HashMap.

После этого я перебираю объект HashMap для преобразования в JSONArray.

Получаю одну уникальную запись из distinctObjects (HashMap Object). Но после преобразования в JSONArray длина JSONArray показывает 2, предполагается, что он равен 1, и я печатаю JSONArray, как показано ниже.

JSONArray --->[{"code":"VA1125-GGA-1","id":"code"},{"code":"12816","id":"id"}]

Ожидаемый результат должен быть:

JSONArray --->[{"code":"VA1125-GGA-1","id":"12816"}]

Пожалуйста, найдите мой код ниже.

JSONObject responseObj;
JSONArray responseArray = new JSONArray();
Map<String, Object> distinctObjects = null;
SearchHit[] searchHits2 = searchResponse2.getHits().getHits();
for (SearchHit hit2 : searchHits2) {
    Map<String, Object> sourceAsMap2 = hit2.getSourceAsMap();
    distinctObjects = new HashMap<String, Object>();
    distinctObjects.put("id", sourceAsMap2.get("id").toString());
    distinctObjects.put("code", sourceAsMap2.get("code").toString());
}               

Iterator it = distinctObjects.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry pair = (Map.Entry)it.next();
    System.out.println(pair.getKey() + " = " + pair.getValue());
    responseObj = new JSONObject();
    responseObj.put("id", pair.getKey());
    responseObj.put("code", pair.getValue());
    responseArray.put(responseObj);
    it.remove(); // avoids a ConcurrentModificationException
}

System.out.println("Link ID List Size --->"+responseArray.length());
System.out.println("JSONArray --->"+responseArray.toString());

1 Ответ

0 голосов
/ 03 июля 2018

Похоже, вы добавляете и code, и id в качестве записей верхнего уровня на свою карту DifferentObjects, поэтому вы получаете два объекта обратно. Если вы хотите выполнить дедупликацию на основе идентификатора, ваш первый цикл должен выглядеть примерно так:

for (SearchHit hit2 : searchHits2) {
    Map<String, Object> sourceAsMap2 = hit2.getSourceAsMap();
    distinctObjects = new HashMap<String, Object>();
    distinctObjects.put(sourceAsMap2.get("id"), sourceAsMap2.get("code").toString());
}    

Это даст вам одну запись в distinctObjects для каждого уникального идентификатора со значением code.

Если вы хотите, вы также можете добавить sourceAsMap2 в качестве значения в distinctObjects, чтобы сохранить полный ответ, если вам нужно больше, чем просто code в последующей обработке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...