簡體   English   中英

對象序列化為json,僅某些字段

[英]Object serialization to json, certain fields only

我有一個很大的嵌套對象。 我想在JSON字符串中序列化此對象,但是我只需要包含某些字段。 這里的問題是字段可能會非常頻繁地更改,我想以一種可以幫助我輕松包含或排除字段進行序列化的方式來構建它。

我知道我可以編寫很多代碼來提取某些字段並“手動”構建JSON。 但是我想知道是否還有其他優雅的方法可以實現類似的結果,但需要指定必填字段列表?

例如,具有以下對象結構,我想在響應中僅包含idname

class Building {
    private List<Flat> flats;
}

class Flat {
    private Integer id;     
    private Person owner;
}


class Person {
    private String name;
    private String surname;
}

JSON:

{
    "flats" : [
        {
            "flat":
            {
                "id" : "1",
                "person" : {
                    "name" : "John"
                }
            }
        }
    ]
}

您可以使用gson序列化/反序列化JSON 然后,您可以包括@Expose批注以僅使用所需的字段。

確保還將您的Gson對象配置為僅序列化“公開”字段。

Gson gson = GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

替代方案:

實際上,您可以按相反的方式進行操作,標記不會暴露的字段。 您可以使用transient關鍵字來做到這一點。 因此,無論您要忽略什么,只需對其添加transient 這是在gson上的gson

PS:這也適用於大多數Java JSON序列化器。

使用com.fasterxml.jackson.annotation.JsonIgnore是實現此目的的另一種方法。

import com.fasterxml.jackson.annotation.JsonIgnore;

class Person {
    private String name;
    @JsonIgnore
    private String surname;
}

當解析器將bean轉換為json時,它將忽略surname 類似的注釋將在其他json處理庫中提供。

如果使用Gson,請研究如何使用ExclusionStrategy和JsonSerializer。

使用它們是控制序列化的一種更靈活的方法,因為它允許確定每個序列化序列化的內容。

如果需要更改要序列化的內容,則以后使用注釋需要從字段中添加/刪除這些注釋。

對於您的示例,后者可能更合適。

這個問題可能是一個很好的起點serialize-java-object-with-gson

暫無
暫無

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

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