Джексон ObjectMapper десериализовать карту с помощью строкового ключа Json - PullRequest
0 голосов
/ 18 июня 2019

Задача - создать правильное представление строки Json. Есть карта, которая может содержать значение этой строки Json. Во время записи этой карты в string mapper экранируйте новую строку и цитируйте Json.

private String getJson() throws JsonProcessingException {
    ObjectMapper mapper = new ObjectMapper();
    Map<String, String> map = new HashMap<>();
    map.put("key1", "val1");
    map.put("key2", "val2");
    return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map);
}

возврат:

{
  "key1" : "val1",
  "key2" : "val2"
}

Код

public String test() throws JsonProcessingException {
    ObjectMapper mapper = new ObjectMapper();
    Map<String, String> map = new HashMap<>();
    map.put("information", getJson());
    String result = mapper.writeValueAsString(map);
    System.out.println(result);
    return result; 
}

возвращение

{"information":"{\r\n  \"key1\" : \"val1\",\r\n  \"key2\" : \"val2\"\r\n}"}

Но возможно ли, чтобы метод test () возвращал строку типа:

{
  "information": {
    "key1": "val1",
    "key2": "val2"
  }
}

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Вы должны преобразовать JSON обратно в карту, прежде чем поместить его в «информационную» карту.В вашем коде это рассматривается как строка, а не как карта.Поэтому вы должны обновить свой метод test() до чего-то вроде этого:

public static String test() throws IOException {
    ObjectMapper mapper = new ObjectMapper();
    TypeReference<HashMap<String, String>> typeRef = new TypeReference<HashMap<String, String>>() {};
    Map<String, String> oldMap = mapper.readValue(getJson(), typeRef);

    Map<String, Map<String, String>> map = new HashMap<>();
    map.put("information", oldMap);

    String result = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map);
    System.out.println(result);
    return result; 
}

И выход

{
  "information" : {
    "key1" : "val1",
    "key2" : "val2"
  }
}
0 голосов
/ 18 июня 2019

Проблема в выводе консоли.Карта имеет значение в виде строки.Если вы хотите вывод с формированием, вы можете поместить карту с «key1», «key2» на карту с ключом «information» и вызвать mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map)

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