从一组 Java Pojo 类 创建一个 JSON 结构

Create a JSON structure from set of Java Pojo classes

我需要从一组 java pojo classes 中创建一个 JSON 对象结构。这将通过查看 Json 文件更好地理解对象的结构。我尝试了 Gson 和 org.codehaus.jackson.map.ObjectMapper 库。但是无法生成与 java pojo 对象中所有字段相关的所有 Json 标签。创建的 json 文件仅包含来自值 stetted 对象的值。我需要在 Json 文件中包含 pojo 对象的所有字段。

Gson

        Hotel hotel = new Hotel(); //This hotel object includes multiple objects and those objects also include multiple objects, lists
        Gson gson = new GsonBuilder().create();
        String json = gson.toJson(hotel);
        System.out.println(json);

对象映射器

ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("/home/Pojos.json");

这是我收到的 class 和 json 回复。

Hotel.java


package datatypes;

import java.util.ArrayList;
import java.util.List;

public class Hotel {


    private     String      hotelCode;
    private     String      chainCode;
    private     String      hotelName;
    private     List<Room>  rooms           =   new ArrayList<Room>(); 
    private     List<RoomRateRestriction>   roomRateRestrictions
    =   new ArrayList<RoomRateRestriction>();


    public String getHotelCode() {
        return hotelCode;
    }
    public void setHotelCode(String hotelCode) {
        this.hotelCode = hotelCode;
    }
    public String getChainCode() {
        return chainCode;
    }
    public void setChainCode(String chainCode) {
        this.chainCode = chainCode;
    }
    public String getHotelName() {
        return hotelName;
    }
    public void setHotelName(String hotelName) {
        this.hotelName = hotelName;
    }
    public List<Room> getRooms() {
        return rooms;
    }
    public void setRooms(List<Room> rooms) {
        this.rooms = rooms;
    }

    public void addRoom(Room room){
        this.rooms.add(room);
    }
    public List<RoomRateRestriction> getRoomRateRestrictions() {
        return roomRateRestrictions;
    }
    public void setRoomRateRestrictions(
            List<RoomRateRestriction> roomRateRestrictions) {
        this.roomRateRestrictions = roomRateRestrictions;
    }

    public void addRoomRateRestrictions(
            RoomRateRestriction roomRateRestriction) {
        this.roomRateRestrictions.add(roomRateRestriction);
    }
}

JSON

   {
     "rooms":[],
     "roomRateRestrictions":[]
   }

您可以使用 jackson-databind 库。 Maven 依赖项是:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.10</version>
</dependency>

另请在下面找到一些示例。这里我使用了 Employee 对象,它里面有嵌套的 Address 对象。

Employee.java

public class Employee {
    private int empId;
    private String firstName;
    private String lastName;
    private double salary;
    private Address address;

    public Employee() {}

    public Employee(int empId, String firstName, String lastName, double salary) {
        this.empId = empId;
        this.firstName = firstName;
        this.lastName = lastName;
        this.salary = salary;
    }

    public Employee(int empId, String firstName, String lastName, double salary, Address address) {
        this.empId = empId;
        this.firstName = firstName;
        this.lastName = lastName;
        this.salary = salary;
        this.address = address;
    }

    public int getEmpId() {
        return empId;
    }

    public void setEmpId(int empId) {
        this.empId = empId;
    }

    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 double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }
}

Address.java

public class Address {
    private String street;
    private String city;
    private String state;
    private String zip;
    private String country;

    public Address() {}

    public Address(String street, String city, String state, String zip, String country) {
        this.street = street;
        this.city = city;
        this.state = state;
        this.zip = zip;
        this.country = country;
    }

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getZip() {
        return zip;
    }

    public void setZip(String zip) {
        this.zip = zip;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }
}

我将示例 java pojo class 转换为 Json 并将 JSON 转换回 pojo 对象。

JacksonConvertion.java

public class JacksonConvertion {
    public static void main(String[] args) {

        pojoToJson();
        jsonToPojo();

    }

    private static void pojoToJson() {
        try {
            System.out.println("Convert Object to json ");
            ObjectMapper mapper = new ObjectMapper();

            Address address = new Address("#103, 1st cross, manyta tech park", "Bengaluru", "Karnataka", "560010",
                    "India");

            Address address1 = new Address();
            address1.setCity("Bengaluru");
            address1.setState("Karnataka");
            address1.setCountry("India");

            Employee emp = new Employee(1233, "Raju", "BG", 98734.23, address1);

            mapper.writeValue(new File("staff.json"), emp);

            String jsonString = mapper.writeValueAsString(emp);
            System.out.println(jsonString);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void jsonToPojo() {
        try {
            System.out.println("Convert Json to Object ");
            ObjectMapper mapper = new ObjectMapper();
            Employee employee = mapper.readValue(new File("staff.json"), Employee.class);

            System.out.println(employee.getFirstName());
            System.out.println(employee.getSalary());

            System.out.println(employee.getAddress().getCity());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

还包括一些链接供您参考。
Link1

Link2

GsonBuilder() 上添加 serializeNulls() 以序列化空字段

Configure Gson to serialize null fields. By default, Gson omits all fields that are null * during serialization.

class Hotel {
    private String name;
    private List<Guest> guests = new ArrayList<>(Collections.singleton(new Guest())); //you have to set a value in order to get the structure of the Guest class otherwise it will show an empty list []
    //getter setter
}

class Guest {
   private String name;
   //getter setter
}

Gson

 Hotel hotel = new Hotel();
 Gson gson = new GsonBuilder().serializeNulls().create();
 String json = gson.toJson(hotel);
 System.out.println(json);

输出

{  
 "name":null, 
 "guests":[  
      {  
         "name":null
      }
   ]
}

我认为这会很好

http://www.java2s.com/Code/Jar/c/Downloadcomfasterxmljacksondatabindjar.htm and http://www.java2s.com/Code/Jar/j/Downloadjacksondatabind205sourcesjar.htm 添加到您的图书馆。

进口com.fasterxml.jackson.core.JsonProcessingException;

进口com.fasterxml.jackson.databind.ObjectMapper;

publicclassjavaPojo{

public static void main(String args[]){
Hotel hotel = new Hotel();
ObjectMapper mapper = new ObjectMapper();
try {
    String json = mapper.writeValueAsString(hotel);
    System.out.println("JSON = " + json);
} catch (JsonProcessingException e) {
    e.printStackTrace();
}}

}

酒店

进口java.util.ArrayList;

进口java.util.List;

public class 酒店{

private     String      hotelCode;
private     String      chainCode;
private     String      hotelName;
private     List<Room>  rooms           =   new ArrayList<Room>(); 
private     List<RoomRateRestriction>   roomRateRestrictions
=   new ArrayList<RoomRateRestriction>();


public String getHotelCode() {
    return hotelCode;
}
public void setHotelCode(String hotelCode) {
    this.hotelCode = hotelCode;
}
public String getChainCode() {
    return chainCode;
}
public void setChainCode(String chainCode) {
    this.chainCode = chainCode;
}
public String getHotelName() {
    return hotelName;
}
public void setHotelName(String hotelName) {
    this.hotelName = hotelName;
}
public List<Room> getRooms() {
    return rooms;
}
public void setRooms(List<Room> rooms) {
    this.rooms = rooms;
}

public void addRoom(Room room){
    this.rooms.add(room);
}
public List<RoomRateRestriction> getRoomRateRestrictions() {
    return roomRateRestrictions;
}
public void setRoomRateRestrictions(
        List<RoomRateRestriction> roomRateRestrictions) {
    this.roomRateRestrictions = roomRateRestrictions;
}

public void addRoomRateRestrictions(
        RoomRateRestriction roomRateRestriction) {
    this.roomRateRestrictions.add(roomRateRestriction);
}

}

房间

public class 房间 {

}

房价限制

public class RoomRateRestriction {

}

输出 - JSON = {"hotelCode":null,"chainCode":null,"hotelName":null,"rooms":[],"roomRateRestrictions":[]}