Một ví dụ tiếp theo của bài Ví dụ JSON với Java – Jackson.
Ví dụ: phân tích cú pháp JSON trong Java, với chuỗi JSON được đọc từ một file:
File employee.json:
{ "firstName":"Vinh", "lastName":"Phan", "address":{ "streetAddress":"11 Tu Lap", "district":"Me Linh", "city":"Ha Noi", "state":"", "postalCode":"100000" }, "age":25, "phoneNumbers":[ { "type":"home", "number":"096677028" }, { "type":"fax", "number":"0435508028" } ], "Sex":"Male", "salary":1200.0 }
Tạo lớp Employee.java
Lưu ý: các bạn chú ý, mình cố ý để biến Sex trong file employee.json. Nên trong lớp Employee.java phải khai báo @JsonGetter("Sex") trước phương thức getSex() và @JsonSetter("Sex") trước phương thức setSex(). Khai báo như vậy để nói với trình phân tích cú pháp Jackson rằng thuộc tính sex được định nghĩa trong tài liệu json là Sex. Nếu không khai báo như vậy thì chương trình sẽ bị lỗi.
package vn.kienthuclaptrinh.json; import java.io.Serializable; import java.util.List; import com.fasterxml.jackson.annotation.JsonGetter; import com.fasterxml.jackson.annotation.JsonSetter; public class Employee implements Serializable { private String firstName; private String lastName; private Address address; private int age; private List<Phone> phoneNumbers; private String sex; private double salary; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public List<Phone> getPhoneNumbers() { return phoneNumbers; } public void setPhoneNumbers(List<Phone> phoneNumbers) { this.phoneNumbers = phoneNumbers; } @JsonGetter("Sex") public String getSex() { return sex; } @JsonSetter("Sex") public void setSex(String sex) { this.sex = sex; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } }
Tạo lớp Address.java
package vn.kienthuclaptrinh.json; import java.io.Serializable; public class Address implements Serializable { private String state; private String city; private String district; private String streetAddress; private String postalCode; public String getState() { return state; } public void setState(String state) { this.state = state; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getDistrict() { return district; } public void setDistrict(String district) { this.district = district; } public String getStreetAddress() { return streetAddress; } public void setStreetAddress(String streetAddress) { this.streetAddress = streetAddress; } public String getPostalCode() { return postalCode; } public void setPostalCode(String postalCode) { this.postalCode = postalCode; } @Override public String toString() { return state + " - " + city + " - " + district + " - " + streetAddress + " - " + postalCode; } }
Tạo lớp Phone.java
package vn.kienthuclaptrinh.json; import java.io.Serializable; public class Phone implements Serializable { private String type; private String number; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } }
Tạo lớp JSONJacksonExample.java
package vn.kienthuclaptrinh.json; import java.io.FileReader; import java.io.IOException; import java.util.List; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; public class JSONJacksonExample { public static void main(String[] args) { try { ObjectMapper mapper = new ObjectMapper(); Employee emp = null; emp = mapper.readValue(new FileReader("D:\\json\\employee.json"), Employee.class); System.out.println("firstName: " + emp.getFirstName()); System.out.println("lastName: " + emp.getLastName()); System.out.println("address: " + emp.getAddress().toString()); System.out.println("age: " + emp.getAge()); System.out.println("phone: "); List<Phone> listPhones = emp.getPhoneNumbers(); for (Phone phone : listPhones) { System.out.println(phone.getType() + ": " + phone.getNumber()); } System.out.println("sex: " + emp.getSex()); System.out.println("salary: " + emp.getSalary()); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
Kết quả:
firstName: Vinh lastName: Phan address: - Ha Noi - Me Linh - 11 Tu Lap - 100000 age: 25 phone: home: 096677028 fax: 0435508028 sex: Male salary: 1200.0