Come convertire POJO in JSON e viceversa?
Voglio sapere se c'è qualche API Java disponibile per convertire un oggetto POJO in un oggetto JSON e viceversa.
4 answers
Sì, c'è il json.org. Date un'occhiata a http://www.json.org/java/index.html
[modificato] Immagina di avere una semplice classe Java come questa:
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; }
}
Quindi, per trasformarlo in un oggetto JSon, è molto semplice. Come questo:
import org.json.JSONObject;
public class JsonTest {
public static void main( String[] args ) {
Person person = new Person();
person.setName( "Person Name" );
person.setAge( 666 );
JSONObject jsonObj = new JSONObject( person );
System.out.println( jsonObj );
}
}
Spero che aiuti.
[modificato] Qui c'è un altro esempio, in questo caso usando Jackson: https://brunozambiazi.wordpress.com/2015/08/15/working-with-json-in-java /
Possiamo anche fare uso di sotto data dipendenza e plugin nel file pom - Faccio uso di maven. Con l'uso di questi è possibile generare POJO secondo il proprio schema JSON e quindi utilizzare il codice indicato di seguito per popolare l'oggetto JSON della richiesta tramite l'oggetto src specificato come parametro per gson.toJson (Oggetto src) o viceversa. Guarda il codice qui sotto:
Gson gson = new GsonBuilder().create();
String payloadStr = gson.toJson(data.getMerchant().getStakeholder_list());
Gson gson2 = new Gson();
Error expectederr = gson2.fromJson(payloadStr, Error.class);
E le impostazioni Maven:
<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>
Se sei a conoscenza di Jackson 2 , c'è un ottimo tutorial su mkyong.com su come convertire oggetti Java in JSON e viceversa. I seguenti frammenti di codice sono stati presi da quel tutorial.
Convertire oggetto Java in 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);
Converti JSON in oggetto Java, 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);
Dipendenza da Jackson 2:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.3</version>
</dependency>
Per il tutorial completo, vai al link sopra indicato.
Usa GSON per convertire POJO in JSONObject. Fare riferimento qui.
Per convertire JSONObject in POJO, basta chiamare il metodo setter nel POJO e assegnare i valori direttamente dal JSONObject.