[英]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.