簡體   English   中英

自定義反序列化器以解析復雜的Json

[英]Custom Deserialiser to parse complex Json

我必須在Json下反序列化

{
    "Student": [
        {
            "Number": "12345678",
            "Name": "abc"
            "Country": "IN",
            "AreaOfInterest": [
                {
                    “FootBall”: “Yes”,
                    “Cricket”: “No”
                }
            ]
        }
    ],
    "hasMore": false,
    "links": [
        {
            "rel": "self",
            "kind": "collection"
        }
    ]
} 

進入下面的POJO

class {
   private String number;
   private String name;
   private String footBall;
}

我寫了Gson自定義反序列化器來提升AreaOfInterest ,如下所示

public List<? extends Student> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
    var jsonObject = json.getAsJsonObject();

    Stream<JsonElement> student = StreamSupport.stream(jsonObject.getAsJsonArray("Student").spliterator(), true);
    Stream<JsonElement> areaOfInterest = StreamSupport.stream(jsonObject.getAsJsonArray("Student").get(0).getAsJsonObject().get("AreaOfInterest").getAsJsonArray().spliterator(), true);


    Stream.concat(student,areaOfInterest)
                                .map(it -> context.deserialize(it, Student.class))
                                .map(Student.class::cast)
                                .collect(List.collector())
}

但解串器返回的學生的兩個對象,而不是一個,一個是所有的字段都除了足球其他空,除了足球為空,任何幫助,如何讓單個對象的所有字段將有很大的幫助,在此先感謝實際學生

這不是您的確切答案,但是使用gson獲取地圖並從該地圖構建pojo可能會更簡單。 或者,如果您不喜歡該地圖,則創建一個類似於JSON的pojo,然后將該pojo映射到所需的pojo。

背景/原因:GSON現在是您選擇的映射器,但可能會更改為其他名稱。 如果發生這種情況,Jackson和您所有自定義的特定於框架的映射器將需要進行轉換/更改。 使用gson創建一個看起來像源的對象,並將其映射到控制器中的自定義POJO,這將使您的代碼意圖清晰明了,並且代碼對框架的更改更具彈性。

暫無
暫無

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

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