簡體   English   中英

如何使用Jackson將反序列化的JSON反序列化為忽略鍵的對象?

[英]How to deserialize a JSON to an object ignoring a key using Jackson?

可以說我有一個JSON:

{

"MovieCount": 153,
"MoviesList": [{...},{...},...]
}

我有:

mapper.readValue(moviesListArrayString, new TypeReference<List<Movie>>(){});

但是當moviesListArrayString為:

[{...},{...},...]

如果我的String是原始JSON,如何告訴Jackson忽略MovieCount並反序列化MoviesList

我將創建一個具有兩個屬性的包裝器對象:

  • Number movieCount
  • List<Movie> moviesList

然后,將值讀取為YourWrapperObject.class並使用moviesList屬性值執行任何操作,而忽略moviecount屬性。

快速,非常丑陋但實用的示例

package test;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {

    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();

        String json = "{\"MovieCount\": 153,\"MoviesList\": [{},{}]}";
        try {
            List<Movie> movies = ((MovieWrapper) mapper.readValue(json, MovieWrapper.class)).moviesList;
            System.out.println(movies.size());
        }
        catch (Throwable t) {
            t.printStackTrace();
        }

    }

    static class MovieWrapper {

        @JsonProperty(value = "MovieCount")
        int movieCount;
        @JsonProperty(value = "MoviesList")
        List<Movie> moviesList;
    }

    static class Movie {

    }

}

輸出量

2

一種解決方案是將完整的JSON作為JsonNode讀取,然后僅反序列化您感興趣的內容:

final JsonNode node = mapper.readTree(...);
movieList = mapper.readValue(node.get("MoviesList").traverse(), typeRefHere);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM