2014-10-28 4 views
0

Я создал приложение для преобразования объекта HashMap в String, его работа отлично, Проблема, с которой я сталкиваюсь, заключается в том, что я хочу снова преобразовать строку HashMap обратно в объект HasMap, когда я попытался что, используя следующий код, я получаю исключение, как показано нижеПреобразование Java String в объект HashMap

Unexpected character ('u' (code 117)): was expecting double-quote to start field name 

Может кто-нибудь пожалуйста, скажите мне решение этой

Мой код приведен ниже

Map<String,Object> map = new HashMap<String,Object>(); 
map.put("userVisible", true); 
map.put("userId", "1256"); 

ObjectMapper mapper = new ObjectMapper(); 
try { 
    map = mapper.readValue(map.toString(), new TypeReference<HashMap<String,Object>>(){}); 
    System.out.println(map.get("userId")); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

Update 1

Как предложено @chrylis я использовал Feature.ALLOW_UNQUOTED_FIELD_NAMES как, как показано ниже, но теперь я получаю следующее исключение

Unexpected character ('=' (code 61)): was expecting a colon to separate field name and value 

обновленный код

Map<String,Object> map = new HashMap<String,Object>(); 
map.put("userVisible", true); 
map.put("userId", "1256"); 
ObjectMapper mapper = new ObjectMapper(); 
mapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); 
try { 
    map = mapper.readValue(map.toString(), new TypeReference<HashMap<String,Object>>(){}); 
    System.out.println(map.get("userId")); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

ответ

2

Вы получаете эту ошибку, потому что JSON указывает, что вы должны указывать имена полей в кавычках, в отличие от обычного объекта JavaScript. Вы можете сказать, Джексон, чтобы разрешить некотируемые имена полей путем настройки ObjectMapper так:

mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); 

Update

Представляется, что более фундаментальная проблема состоит в том, что вы пытаетесь использовать Java toString() для преобразования карту до String, а также конвертер Jackson JSON для его преобразования. Эти два являются совершенно разными форматами, и если вам нужно будет преобразовать строку обратно в объект, вы, вероятно, должны использовать картографию Jackson, чтобы в первую очередь превратить карту в JSON.

+0

получение 'Неожиданный символ ('=' (код 61)): ожидал, что двоеточие будет разделять имя и значение поля. –

+0

вы можете показать мне пример –

+1

@AlexMan String json = mapper.writeValueAsString (map); – StaxMan