java - 将 Json 反序列化为包含通用对数组的 Java 实体

标签 java json serialization jackson

我正在尝试将 json 反序列化为 java 实体,但我无法让 Jackson 将 json 数组反序列化为 Pair[]。 Pair 是一个自定义类,但它遵循 SO 上找到的标准形式。 :

public class Pair<K, V> {

private final K k;
private final V v;

public Pair(K k, V v) {
    this.k = k;
    this.v = v;
}

public K getKey() {
    return k;
}

public V getValue() {
    return v;
}
...
}

Json 对象可以根据需要进行更改,但我正在尝试使用以下形式的内容:

{"priority":1,"account":"012345","tld":"com","name":"domain_check","params":[{"key":"domain","value":"domain.com"}]}

我的“DefaultRequest”实体类包含:

@Entity
public class DefaultRequest implements Serializable, Comparable, Request {

//other fields...

private Pair[] params;

@Override
public Pair[] getParams() {
    return params;
}

@Override
public void setParams(Pair[] params) {
    this.params = params;

//other methods...
}
}

如果有人已经回答了这个问题,我很抱歉。诚然,我对使用 Jackson 很陌生,但我已经在这上面花了近 3 天的时间,而且我有一个截止日期。我还必须相信之前有人必须反序列化到包含 Pair[] 的实体。欢迎任何想法。如果有更好的替代方案,我可以完全灵活地更改 json 格式和实体类。 提前致谢!

最佳答案

问题有点模糊,所以我可能是错的,但您可能正在寻找注释来告诉 Jackson 如何使用自定义构造函数来传递数据。如果是这样:

@JsonCreator
public Pair(@JsonProperty("key") K k,
   @JsonProperty("value") V v) {
    ...
}

这适用于所有类型,而不仅仅是基元,也不会尝试猜测什么去了哪里。需要名称注释只是因为 JDK 不会在字节码中添加参数名称,因此与方法名称不同,它们不可用。

编辑:

看来需要转型了。那么这个怎么样:

@JsonCreator
public Pair(Map<String,String> json)
{
   Map.Entry<String,String> en = json.entrySet().iterator().next();
   key = en.getKey();
   value = en.getValue();
}

@JsonValue
public Map<String,String> asMap() {
  Map<String,String> m = new HashMap<String,String>();
  m.put(key, value);
  return m;
}

代码较多,但允许转换为中间类型。就其值(value)而言,Jackson 2.1 将包含标准的“委托(delegate)”串行器/解串器,以便定义封装此类逻辑的转换器。

关于java - 将 Json 反序列化为包含通用对数组的 Java 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12714785/

相关文章:

ios - 含糊不清地使用 'subscript' 与 NSArray & JSON

java - 是否可以反/序列化 map 自身在 jackson 中的多态性?

c++ - 如何从存档中检索 true_type?

python 稀疏 csr 矩阵 : how to serialize it

arrays - 在 Swift 中反序列化一个以数组作为值的字典

java - MYSQL在linux平台不返回结果,在windows下

JAVA 计算 3^n - 3*2^n + 3 的最优方法。

java - 我如何在java中使用条件运算符编写解码函数

java - 多语言数据库,默认回退

javascript - Json 格式的对象到带有新键的简单数组