【问题标题】:Unable to parse Json with Map,ObjectMapper无法使用 Map、ObjectMapper 解析 Json
【发布时间】:2012-11-06 06:22:03
【问题描述】:

现在我有 Json 解析的经验。没有太多的收集练习。我有一个 Json 字符串

{   
    "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] 的值;没有单整数参数构造函数/工厂方法 在 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)

【问题讨论】:

    标签: java json parsing collections object-object-mapping


    【解决方案1】:

    您在开头给出的示例是针对单个 AuthenticateUser 对象的。这就是作为输入传递给该程序的所有内容吗?这绝对不会正确解析。

    单个 AuthenticateUser 不是类型的 Map (String, AuthenticateUser)

    我想你可能很困惑,你为什么要制作地图?如果您打算只解析一个对象,您只需要:

    AuthenticateUser user =mapper.readValue(result, AuthenticateUser.class);
    
    System.out.println(user.time);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多