从一组Java Pojo类创建JSON结构

问题描述 投票:0回答:2

我需要从一组Java pojo类创建一个JSON对象结构。仅查看Json文件,就可以更好地了解对象的结构。我尝试了Gson和org.codehaus.jackson.map.ObjectMapper库。但是无法生成与java pojo对象中所有字段相关的所有Json标签。创建的json文件仅具有来自值已设置对象的值。我需要在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

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

这是我得到的类和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":[]
   }
java json gson
2个回答
0
投票

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

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

也请在下面找到一些示例示例。在这里,我使用了其中嵌套了Address对象的Employee Object。

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;
    }
}

我将Sample java pojo类转换为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


0
投票

使用serializeNulls()序列化空字段

配置Gson以序列化空字段。默认情况下,Gson忽略所有为空的字段*在序列化期间。

class Hotel {
    private String name;
    private List<Guest> guests = new ArrayList<>(Collections.singleton(new Guest()));
    //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
      }
   ]
}
© www.soinside.com 2019 - 2024. All rights reserved.