How to convert POJO to JSON and vice versa?

前端 未结 6 723
忘了有多久
忘了有多久 2020-11-27 15:40

I want to know if there is any Java API available to convert a POJO object to a JSON object and vice versa.

相关标签:
6条回答
  • 2020-11-27 16:08

    Take a look at https://www.json.org

    [edited] Imagine that you have a simple Java class like this:

    public class Person {
    
        private String name;
        private Integer age;
    
        public String getName() { return this.name; }
        public void setName( String name ) { this.name = name; }
    
        public Integer getAge() { return this.age; }
        public void setAge( Integer age ) { this.age = age; }
    
    }
    

    So, to transform it to a JSon object, it's very simple. Like this:

    import org.json.JSONObject;
    
    public class JsonTest {
    
        public static void main( String[] args ) {
            Person person = new Person();
            person.setName( "Person Name" );
            person.setAge( 333 );
    
            JSONObject jsonObj = new JSONObject( person );
            System.out.println( jsonObj );
        }
    
    }
    

    Hope it helps.

    [edited] Here there is other example, in this case using Jackson: https://brunozambiazi.wordpress.com/2015/08/15/working-with-json-in-java/

    Maven:

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

    And a link (below) to find the latest/greatest version:

    https://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22com.fasterxml.jackson.core%22%20AND%20a%3A%22jackson-databind%22

    0 讨论(0)
  • 2020-11-27 16:17

    You can use jackson api for the conversion

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

    add above maven dependency in your POM, In your main method create ObjectMapper

    ObjectMapper mapper = new ObjectMapper();
    mapper.enable(SerializationFeature.INDENT_OUTPUT);
    

    later we nee to add our POJO class to the mapper

    String json = mapper.writeValueAsString(pojo);
    
    0 讨论(0)
  • 2020-11-27 16:18

    If you are aware of Jackson 2, there is a great tutorial at mkyong.com on how to convert Java Objects to JSON and vice versa. The following code snippets have been taken from that tutorial.

    Convert Java object to JSON, writeValue(...):

    ObjectMapper mapper = new ObjectMapper();
    Staff obj = new Staff();
    
    //Object to JSON in file
    mapper.writeValue(new File("c:\\file.json"), obj);
    
    //Object to JSON in String
    String jsonInString = mapper.writeValueAsString(obj);
    

    Convert JSON to Java object, readValue(...):

    ObjectMapper mapper = new ObjectMapper();
    String jsonInString = "{'name' : 'mkyong'}";
    
    //JSON from file to Object
    Staff obj = mapper.readValue(new File("c:\\file.json"), Staff.class);
    
    //JSON from URL to Object
    Staff obj = mapper.readValue(new URL("http://mkyong.com/api/staff.json"), Staff.class);
    
    //JSON from String to Object
    Staff obj = mapper.readValue(jsonInString, Staff.class);
    

    Jackson 2 Dependency:

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

    For the full tutorial, please go to the link given above.

    0 讨论(0)
  • 2020-11-27 16:20

    Use GSON for converting POJO to JSONObject. Refer here.

    For converting JSONObject to POJO, just call the setter method in the POJO and assign the values directly from the JSONObject.

    0 讨论(0)
  • 2020-11-27 16:28

    We can also make use of below given dependency and plugin in your pom file - I make use of maven. With the use of these you can generate POJO's as per your JSON Schema and then make use of code given below to populate request JSON object via src object specified as parameter to gson.toJson(Object src) or vice-versa. Look at the code below:

    Gson gson = new GsonBuilder().create();
    String payloadStr = gson.toJson(data.getMerchant().getStakeholder_list());
    
    Gson gson2 = new Gson();
    Error expectederr = gson2.fromJson(payloadStr, Error.class);
    

    And the Maven settings:

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>1.7.1</version>
    </dependency>
    
    <plugin>
        <groupId>com.googlecode.jsonschema2pojo</groupId>
        <artifactId>jsonschema2pojo-maven-plugin</artifactId>
        <version>0.3.7</version>
        <configuration>
            <sourceDirectory>${basedir}/src/main/resources/schema</sourceDirectory>
            <targetPackage>com.example.types</targetPackage>
        </configuration>
        <executions>
            <execution>
                <phase>generate-sources</phase>
                <goals>
                    <goal>generate</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    
    0 讨论(0)
  • 2020-11-27 16:28

    Take below reference to convert a JSON into POJO and vice-versa

    Let's suppose your JSON schema looks like:

    {
      "type":"object",
      "properties": {
        "dataOne": {
          "type": "string"
        },
        "dataTwo": {
          "type": "integer"
        },
        "dataThree": {
          "type": "boolean"
        }
      }
    }
    

    Then to covert into POJO, your need to decleare some classes as explained in below style:

    ==================================
    package ;
    public class DataOne
    {
        private String type;
    
        public void setType(String type){
            this.type = type;
        }
        public String getType(){
            return this.type;
        }
    }
    
    ==================================
    package ;
    public class DataTwo
    {
        private String type;
    
        public void setType(String type){
            this.type = type;
        }
        public String getType(){
            return this.type;
        }
    }
    
    ==================================
    package ;
    public class DataThree
    {
        private String type;
    
        public void setType(String type){
            this.type = type;
        }
        public String getType(){
            return this.type;
        }
    }
    
    ==================================
    package ;
    public class Properties
    {
        private DataOne dataOne;
    
        private DataTwo dataTwo;
    
        private DataThree dataThree;
    
        public void setDataOne(DataOne dataOne){
            this.dataOne = dataOne;
        }
        public DataOne getDataOne(){
            return this.dataOne;
        }
        public void setDataTwo(DataTwo dataTwo){
            this.dataTwo = dataTwo;
        }
        public DataTwo getDataTwo(){
            return this.dataTwo;
        }
        public void setDataThree(DataThree dataThree){
            this.dataThree = dataThree;
        }
        public DataThree getDataThree(){
            return this.dataThree;
        }
    }
    
    ==================================
    package ;
    public class Root
    {
        private String type;
    
        private Properties properties;
    
        public void setType(String type){
            this.type = type;
        }
        public String getType(){
            return this.type;
        }
        public void setProperties(Properties properties){
            this.properties = properties;
        }
        public Properties getProperties(){
            return this.properties;
        }
    }
    
    0 讨论(0)
提交回复
热议问题