Конвертировать массив json, содержащий массив, в Map в Java - PullRequest
0 голосов
/ 28 января 2019

Мне нужно преобразовать строку в карту для следующей строки json в Java: обратите внимание, что в этой строке json содержится массив, и именно здесь я столкнулся с проблемой:

{
   "type":"auth",
   "amount":"16846",
   "level3":{
      "amount":"0.00",
      "zip":"37209",
      "items":[
         {
            "description":"temp1",
            "commodity_code":"1",
            "product_code":"11"
         },
         {
            "description":"temp2",
            "commodity_code":"2",
            "product_code":"22"
         }
      ]
   }
}

Я пробовал паруспособов, указанных в ссылках ниже:

Преобразование строки JSON в карту - Джексон

Анализ JSONObject и создание HashMap

Я получаю ошибку:

Ошибка синтаксического анализатора JSON: Невозможно десериализовать экземпляр java.lang.String из маркера START_OBJECT ...};строка: 3, столбец: 20] (через цепочку ссылок: java.util.LinkedHashMap ["level3"]) com.fasterxml.jackson.databind.JsonMappingException: Невозможно десериализовать экземпляр java.lang.String из маркера START_OBJECT

Таким образом, чтобы дать более подробную информацию о том, что я делаю с картой, эта карта будет преобразована обратно в строку json, используя следующий метод:

    public static String getJSON(Object map) throws IOException {
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

    ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
    OutputStream stream = new BufferedOutputStream(byteStream);
    JsonGenerator jsonGenerator = objectMapper.getFactory().createGenerator(stream, JsonEncoding.UTF8);
    objectMapper.writeValue(jsonGenerator, map);
    stream.flush();
    jsonGenerator.close();
    return new String(byteStream.toByteArray());
}

1 Ответ

0 голосов
/ 28 января 2019

Вы не можете анализировать содержимое JSON в Map<String, String> (как это делается в двух опубликованных вами ссылках).Но вы можете разобрать его в Map<String, Object>.

Например, вот так:

ObjectMapper mapper = new ObjectMapper();
File file = new File("example.json");
Map<String, Object> map;
map = mapper.readValue(file, new TypeReference<Map<String, Object>>(){});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...