【问题标题】:Deserialize error with Jackson (png encoding)使用 Jackson 反序列化错误(png 编码)
【发布时间】:2012-03-08 10:34:39
【问题描述】:

我有以下字符串要解析(字符串到对象):

{   "langues" : 
    [
        {"iso":"en", "id":1, "flag":[0,144,255,62,1,152,84,62,1,104,50,63,1,32,90,61,1,172,110,66,1,216,...]}
        ,
        {"iso":"fr", "id":2, "flag":[0,208,0,63,1,208,106,62,1,120,49,63,1,32,90,61,1,60,110,...]}
        ,
        { etc... }
    ],
    "when" : 133111... // timestamp
}

flag 是 png 图像的字节数组

以及以下对象:

public class Langues {
    private Long when;
    private ArrayList<Langue> langues;

    public Long getWhen(){ return when; }
    public void setWhen(Long when) { this.when=when; }
    ...
}

public class Langue {
    private int id;
    private String iso;
    private byte[] flag;

    // getters / setters
}

这给我一个错误:

ObjectMapper mapper = new ObjectMapper();
Langues node = mapper.readValue(myString, Langues.class);

JsonParseException

Numeric value (144) out of range of Java byte

也许 byte[] 不是它的正确容器,或者我可以在某处设置杰克逊解析器编码吗?

提前致谢!!

[EDIT]

也许用 -128 编辑字节数组的每个字段可以做到这一点,但有点棘手而且真的浪费时间......

感谢邮件列表,我联系了 codehaus,我很快就用 AnsiString 而不是 UNICODE 或 Bytes 结束了,瞧!

{"langues":[{"iso":"zh","id":7,"flag":"iVBORw0KGgoAAAANSUhEUgAAAIAAAABpCAYAAADy...

使用相同的简单代码

ObjectMapper mapper = new ObjectMapper();
Langues node = mapper.readValue(myString, Langues.class);

【问题讨论】:

  • Langue 是可公开访问的课程吗?我曾经遇到过这样的错误,问题是我声明了一个私有类而不是公开的。什么是 getter 和 setter?
  • LangueLangues 是它们自己的 java 文件中的公共类,具有简单的 getter 和 setter,例如 public int getId(){ return id; } public void setId(int id){ this.id=id; } 就是这样
  • 请添加您得到的错误/异常——否则很难知道发生了什么。对于它的价值,除了 byte[] 的 JSON 类型实际上是 Base64 编码的字符串。但是,实际的整数数组也应该可以工作(如果没有,请提交错误报告?)
  • 我的数组由无符号字节组成,java 需要有符号字节。我做了一个 AnsiString Base64 编码,速度非常快......就是这样......

标签: android json jackson


【解决方案1】:

也许用 -128 编辑字节数组的每个字段可以做到这一点,但有点棘手而且真的浪费时间......

感谢邮件列表,我联系了 codehaus,我很快就用 AnsiString 而不是 UNICODE 或 Bytes 结束了,瞧!

{"langues":[{"iso":"zh","id":7,"flag":"iVBORw0KGgoAAAANSUhEUgAAAIAAAABpCAYAAADy...

使用相同的简单代码

ObjectMapper mapper = new ObjectMapper();
Langues node = mapper.readValue(myString, Langues.class);

【讨论】:

    猜你喜欢
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2022-12-13
    • 1970-01-01
    相关资源
    最近更新 更多