【问题标题】:Jackson deserialize mixed array杰克逊反序列化混合数组
【发布时间】:2020-02-29 15:17:50
【问题描述】:

我有一个复杂的 json 字符串,我正在尝试反序列化。一个简化的例子是(我正在解析的数据比这更嵌套):

{
  "content": [
    {
      "value": {
        "name": "name1",
        "subvalue": {
          "id": "id1"
        }
      }
    },
    {
      "reference": "mixed"
    },
    {
      "value": {
        "name": "name2",
        "subvalue": {
          "id": "id2"
        }
      }
    }
  ]
}

我正在尝试通过自定义反序列化器对其进行反序列化,它工作正常,除了它还用空值填充数组(我不需要的“引用”部分)。

这是我的数据类:

@JsonDeserialize(using = ResultDeserializer.class)
class ResultInfo {
    public String name;
    public String id;
}

我的自定义反序列化器:

class ResultDeserializer extends JsonDeserializer<ResultInfo> {
    @Override
    public ResultInfo deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException, JsonProcessingException {
        ResultInfo resultInfo = null;
        ObjectCodec mapper = jsonParser.getCodec();
        JsonNode node = mapper.readTree(jsonParser);

        node = node.get("value");

        if (node != null) {
            resultInfo = new ResultInfo();
            resultInfo.name(node.get("name").toString());
            resultInfo.id(node.at("/subvalue/id").toString());
        }

        return resultInfo;
    }

}

但是,当使用自定义解串器填充数组时,我在数组中得到空值:

final CollectionType collectionType =
                TypeFactory
                        .defaultInstance()
                        .constructCollectionType(ArrayList.class, ResultInfo.class);

ArrayList<ResultInfo> resultInfos = null;
try {
   ObjectReader reader = mapper.readerFor(collectionType);
   resultInfos = reader.readValue(rootNode);
} catch (Exception e) {
   Log.e(TAG, "Exception:" + e.getMessage());
}

对于反序列化,是否有等效于:

mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

我也尝试将@JsonInclude(Include.NON_NULL) 添加到我的数据类中,但没有成功。

【问题讨论】:

    标签: java json jackson2


    【解决方案1】:

    json示例无效,应该是这样的

    {
      "content": [
        {
          "value": {
            "name": "name1",
            "subvalue": {
              "id": "id1"
            }
          }
        },
        {
          "reference": "mixed"
        },
        {
          "value": {
            "name": "name2",
            "subvalue": {
              "id": "id2"
            }
          }
        }
      ]
    }
    

    【讨论】:

    • 是的,我编辑了它。您可以简单地发表评论。
    猜你喜欢
    • 2017-11-05
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 2012-11-19
    • 2016-10-23
    • 1970-01-01
    相关资源
    最近更新 更多