加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用Jackson对数组进行反序列化

发布时间:2020-12-14 05:54:41 所属栏目:Java 来源:网络整理
导读:我有像 JSON-RPC客户端,我无法反序列化 将json字符串传入我的java对象. 传入的json格式为: {"value":"xxxx","type":"xxxx"} 我想要反序列化的对象: @JsonAutoDetect@JsonDeserialize()public class ReturnValue {private Object value;private String type
我有像 JSON-RPC客户端,我无法反序列化
将json字符串传入我的java对象.
传入的json格式为:
{"value":"xxxx","type":"xxxx"}

我想要反序列化的对象:

@JsonAutoDetect
@JsonDeserialize()
public class ReturnValue {

private Object value;
private String type;

@JsonCreator
public ReturnValue(@JsonProperty("value") String val,@JsonProperty("type") String type) {
    value = val;
    this.type = type;
}

...getters,setters...

这似乎工作正常,如果值是String,但如果它是数组类型,它会抛出
JsonMapping异常 – 无法从START_ARRAY标记中反序列化java.lang.String的实例
像这样的json:

{"value":[8,10],"type":"[int]"}

代码是:

int[] arr = (int[])getReturnValue(jsonString).getValue();

其中getReturnValue并不特别:

ObjectMapper om = new ObjectMapper();
    ReturnValue rv = null;
    rv = om.readValue(json,ReturnValue.class);
    return rv;

另一个问题是我希望type属性是Class类型,但这会抛出
另一个映射异常.杰克逊有没有办法做到这一点,或者我必须自己从字符串转换为适当的类.谢谢你的任何建议.

解决方法

将构造函数更改为:
@JsonCreator
public ReturnValue(@JsonProperty("value") Object val,@JsonProperty("type") String type) {

因为,就像错误指出的那样,它不知道如何从数组中生成一个String.但是String和JSON Array都可以转换为Object;如果是这样,它将是Java String,或Java List(用于JSON数组),或Java Map(用于JSON对象).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读