现在有几天我有Json解析的经验。没有太多关于collection的练习。我有一个Json String

{
    "time":1352113682,
    "api_version":"1",
    "firstname":"abc",
    "lastname":"xyz",
    "company":"Cool Apps",
    "email":"abc@apps.com.au"
}


我上课了

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:无法从JSON整数实例化[简单类型,类AuthenticateUser]类型的值;没有single-int-arg构造函数/工厂方法
    在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)

最佳答案

您在开始时给出的示例是针对单个AuthenticateUser对象的。是否所有这些都作为输入传递给该程序?这绝对不会正确解析。

单个AuthenticateUser不是类型为Map(字符串,AuthenticateUser)的映射

我想也许您很困惑,为什么要绘制地图?如果您打算仅解析单个对象,那么您需要做的是:

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

System.out.println(user.time);


看起来怎么样?您是否以JSON传递地图?

10-04 16:03
查看更多