-1

I was trying to convert the json string to hashmap using com.fasterxml.jackson.databind.ObjectMapper.

String str = "{\"key\":\"[{\"one\":\"value\"}]\"}";
ObjectMapper mapper = new ObjectMapper();
try {
    HashMap<String, String> map = mapper.readValue(str, HashMap.class);
    System.out.println(map);
} catch (JsonMappingException e) {
    e.printStackTrace();
} catch (JsonProcessingException e) {
    e.printStackTrace();
}

But getting the below error,

com.fasterxml.jackson.core.JsonParseException: Unexpected character ('o' (code 111)): was expecting comma to separate Object entries
 at [Source: (String)"{"key": "[{"one":"value"}]"}"; line: 1, column: 14]
    at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2391)
    at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:735)
    at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:659)
    at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._skipComma(ReaderBasedJsonParser.java:2382)
    at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextFieldName(ReaderBasedJsonParser.java:947)
    at com.fasterxml.jackson.databind.deser.std.MapDeserializer._readAndBindStringKeyMap(MapDeserializer.java:594)
    at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:437)
    at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:32)
    at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4674)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3629)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3597)
    at com.sample.quick.check.one.App.main(App.java:15)

In the json string, I want the key and value as string and store them into hashMap. I don't want to parse the value in to jsonArray.

  • problem is in json, try this json {"key":[{"one":"value"}]} – aramcpp Jul 14 '22 at 10:36
  • 1
    Either do as suggested and change `HashMap` to `HashMap` (value of `key` will be deserialized into `Map`) or - if you really want to deserialize `key` into String - fix your json by escaping quotes inside the value: `"{\"key\":\"[{\\\"one\\\":\\\"value\\\"}]\"}"` – Laonel Jul 14 '22 at 10:43

1 Answers1

2

JSON string is not valid. If the value of key is a string, then you need to escape \". This means you need to tell to 'Java' to escape also the \ character.

Change the string to String str = "{\"key\":\"[{\\\"one\\\":\\\"value\\\"}]\"}";

This means:

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.util.HashMap;

class Scratch {
    public static void main(String[] args) {
        String str = "{\"key\":\"[{\\\"one\\\":\\\"value\\\"}]\"}";
        ObjectMapper mapper = new ObjectMapper();
        try {
            HashMap<String, String> map = mapper.readValue(str, HashMap.class);
            System.out.println(map);
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
sigur
  • 662
  • 6
  • 21