JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,由于其簡單易用、易于閱讀、可讀性高等特點,被廣泛運用到程序開發中。而Java作為一種常用的編程語言,在進行JSON序列化時,經常會遇到一些問題,特別是在處理父類相關的數據時。
在Java中,一個類可以繼承另一個類,父類中可能存在一些屬性或方法,這些繼承關系在進行JSON序列化時需要特別關注。下面通過示例來講解Java JSON序列化父類的相關問題。
public class Animal { protected String name; protected int age; public Animal(String name, int age) { this.name = name; this.age = age; } } public class Dog extends Animal { private String breed; public Dog(String name, int age, String breed) { super(name, age); this.breed = breed; } }
如上面所示,有一個Animal父類和一個繼承于Animal的Dog子類。為了進行JSON序列化,我們需要添加相應的依賴:
com.fasterxml.jackson.core jackson-databind 2.9.8
下面我們對Dog類進行JSON序列化:
Dog dog = new Dog("Lulu", 2, "Husky"); ObjectMapper objectMapper = new ObjectMapper(); String jsonStr = objectMapper.writeValueAsString(dog); System.out.println(jsonStr);
運行上述代碼會得到如下結果:
{"breed":"Husky","name":"Lulu","age":2}
從結果可以看出,Dog的屬性都能夠正常輸出。但是如果我們想輸出Dog父類Animal中的屬性呢?下面我們可以對Dog類進行逐個屬性進行處理。
public class Animal { private String name; private int age; public Animal(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } public class Dog extends Animal { private String breed; public Dog(String name, int age, String breed) { super(name, age); this.breed = breed; } public String getBreed() { return breed; } public void setBreed(String breed) { this.breed = breed; } @Override public String getName() { return super.getName(); } @Override public void setName(String name) { super.setName(name); } @Override public int getAge() { return super.getAge(); } @Override public void setAge(int age) { super.setAge(age); } }
在Animal中添加了相應的getter和setter方法,在Dog中也對Animal中的getter和setter方法進行了重寫。現在再次運行JSON序列化代碼,將會得到如下結果:
{"breed":"Husky","age":2,"name":"Lulu"}
從輸出結果可以看出,Dog父類Animal中的屬性已經被序列化出來了。因此,在JSON序列化過程中,需要注意父類子類之間的關系及屬性的繼承關系,對相應的getter和setter方法進行重寫。這樣才能夠得到我們所期望的數據序列化結果。
下一篇vue數組展開語法