получение или выборка значения из массива объектов из HashMap - PullRequest
0 голосов
/ 05 мая 2020

У меня следующая структура карты

{CDetails = [{"CollegeName": "Peters Stanford", "collegeLo c": "UK"}, {}]}

Я пытаюсь получить значение CollegeLo c из вышеупомянутой структуры

Это то, что я пробовал

public static void main(String[] args) {
     Map < String, Object > empMap = new HashMap < > ();

    JSONObject collegeNameJsonObj = new JSONObject();
    collegeNameJsonObj.put("collegeName", "Peters Stanford");

    JSONObject collegeIdJsonObj = new JSONObject();
    collegeNameJsonObj.put("collegeLoc", "UK");

    JSONArray jsonArray = new JSONArray();
    jsonArray.add(collegeNameJsonObj);
    jsonArray.add(collegeIdJsonObj);

    empMap.put("CDetails", jsonArray);


  System.out.println(empMap.entrySet().stream().filter(map->map.getKey().equals("CDetails")).map(map->map.getValue()).collect(Collectors.toList()));

Ударил здесь, не удалось продолжить синтаксический анализ l oop /.

как получить значение CollegeLo c в этом случае? любая помощь была бы замечательной.

Ответы [ 3 ]

1 голос
/ 05 мая 2020

Попробуйте следующий код,

empMap.entrySet().stream().filter(map -> map.getKey().equals("CDetails")).forEach(e -> {
            JSONArray jsArray = (JSONArray) e.getValue();
            for (Object jsObject : jsArray) {
                JSONObject obj = (JSONObject) jsObject;
                if (obj.containsKey("collegeLoc")) {
                    System.out.println(obj.getAsString("collegeLoc"));
                }
            }
        });
0 голосов
/ 05 мая 2020

Если вы используете net.minidev.json json lib, попробуйте следующий код:

JSONArray array = (JSONArray) empMap.get("CDetails");

array.stream().filter(o -> {
    JSONObject jsonObject = (JSONObject) o;
    return jsonObject.containsKey("collegeLoc");
}).map(o -> {
    JSONObject jsonObject = (JSONObject) o;
    return jsonObject.getAsString("collegeLoc");
}).forEach(System.out::println);
0 голосов
/ 05 мая 2020

Это может быть

json.getJSONArray("CDetails").getJSONObject(0).getString("slogan")

Или, что лучше, создать объект Value и сериализовать / десериализовать его. Будет намного проще управлять и перемещаться с классом Java, чем с чистым документом JSON.

class ValueObject {
  @JsonProperty("CDetails")
  private List<Detail> details;

  static class Detail {
    private String collegeName;
    private String collegeLoc;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...