【问题标题】:JsonParseException while trying to map Json尝试映射 Json 时出现 JsonParseException
【发布时间】:2014-03-13 19:50:12
【问题描述】:

我正在尝试将 Json 映射到 POJO,但我遇到了这个异常:

这是我的代码:

ObjectMapper mapper = new ObjectMapper();
                try {
                    InputStream is = getActivity().getAssets().open("user.json");

                    List<MessageCenterResponse> mcr = (List<MessageCenterResponse>) mapper.readValue(content, MessageCenterResponse.class);
                    System.out.println(mcr);
                }
                catch (IOException ex) {
                    ex.printStackTrace();   
                }

我收到以下异常:

org.codehaus.jackson.JsonParseException: Unexpected character ('a' (code 97)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 at [Source: java.io.StringReader@41e86930; line: 1, column: 2]

是否与类型问题有关?

【问题讨论】:

  • 你认为is.toString(); 做了什么,你为什么这么认为?
  • 对不起,我忘了把它拿掉,但是当我处理输入流本身时,我得到了这个:org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of MessageCenterResponse out of START_ARRAY token at [来源:android.content.res.AssetManager$AssetInputStream@41e83dc8;行:1,列:1]
  • 你现在为什么要去掉类型标记?
  • 即使在添加类型令牌后,我仍然无法从 START_ARRAY 令牌中反序列化 MessageCenterResponse 实例
  • 向我们展示您是如何使用它的。应该是TypeReference&lt;List&lt;MessageCenterResponse&gt;&gt;

标签: java android json jackson


【解决方案1】:

InputStream 类从Object 继承其toString() 方法,在该方法中(Oracle JDK 7)实现为

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

换句话说,它不会读取流并将内容作为String 返回。

您需要自己使用any number of techniques for reading from an InputStream 进行操作。或者将InputStream 直接传递给ObjectMapper 方法。

List<MessageCenterResponse> mcr = mapper.readValue(is, new TypeReference<List<MessageCenterResponse>>() {});

【讨论】:

    猜你喜欢
    • 2021-10-08
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 2019-11-20
    相关资源
    最近更新 更多