Невозможно разобрать Json с помощью Map, ObjectMapper

Сейчас у меня есть опыт разбора Json. У меня нет большой практики с коллекцией. У меня есть строка Json.

{   
    "time":1352113682,
    "api_version":"1",
    "firstname":"abc",
    "lastname":"xyz",
    "company":"Cool Apps",
    "email":"[email protected]"
}

я сделал класс

public class AuthenticateUser implements Serializable{

    // Response when Successfully Login
    public String time;
    public String api_version;
    public String firstname;
    public String lastname;
    public String company;
    public String email;

}

И пытаюсь разобрать это так

Map<String, AuthenticateUser> map=null;
ObjectMapper mapper=new ObjectMapper();
try{
    map=mapper.readValue(result,new TypeReference<Map<String, AuthenticateUser>>(){});
    Set<String> keys=map.keySet();
    for (String key : keys) {
    System.out.println(map.get(key).time);
    System.out.println(map.get(key).api_version);
        System.out.println(map.get(key).firstname);
    System.out.println(map.get(key).lastname);
    System.out.println(map.get(key).company);
    System.out.println(map.get(key).email);
    }
}catch (Exception e) {
    e.printStackTrace();
}

Но получить эту ошибку

com.fasterxml.jackson.databind.JsonMappingException: невозможно создать экземпляр значения типа [простой тип, класс AuthenticateUser] из целого числа JSON; нет конструктора/фабричного метода с одним целым аргументом в com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromInt(StdValueInstantiator.java:316) в com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromNumber(BeanDeserializer. java:427) на com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:119) на com.fasterxml.jackson.databind.deser.std.MapDeserializer._readAndBindStringMap(MapDeserializer.java:429) на com .fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:310) на com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:26) на com.fasterxml.jackson .databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2577) в com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1817) в Driver$1.run(Driver.java:140)


person Mufrah    schedule 06.11.2012    source источник


Ответы (1)


Пример, который вы привели в начале, относится к одному объекту AuthenticateUser. Это все, что передается этой программе в качестве входных данных? Это абсолютно не будет правильно анализировать.

Один AuthenticateUser не является картой типа (String, AuthenticateUser).

Я думаю, может быть, вы запутались, зачем вы делаете карту? Если вы намеревались проанализировать только один объект, все, что вам нужно, это:

AuthenticateUser user =mapper.readValue(result, AuthenticateUser.class);

System.out.println(user.time);

Как это выглядит? Вы передаете карту в JSON?

person SpacePrez    schedule 16.05.2013