Подтвердить что ты не робот

Как конвертировать POJO в JSON и наоборот?

Я хочу знать, существует ли какой-либо Java API для преобразования объекта POJO в объект JSON и наоборот.

4b9b3361

Ответ 1

Да, есть json.org. Взгляните на http://www.json.org/java/index.html

[отредактировано] Представьте, что у вас есть простой Java-класс, подобный этому:

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

}

Итак, преобразовать его в объект JSon очень просто. Как это:

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

}

Надеюсь, поможет.

[отредактировано] Здесь есть другой пример, в данном случае с использованием Джексона: 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>

И ссылка (ниже), чтобы найти последнюю/лучшую версию:

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

Ответ 2

Мы также можем использовать приведенную ниже зависимость и плагин в вашем файле pom - я использую maven. С их помощью вы можете генерировать POJO в соответствии с вашей схемой JSON, а затем использовать приведенный ниже код для заполнения запроса JSON-объекта через объект src, указанный как параметр gson.toJson(Object src) или наоборот. Посмотрите на код ниже:

Gson gson = new GsonBuilder().create();
String payloadStr = gson.toJson(data.getMerchant().getStakeholder_list());

Gson gson2 = new Gson();
Error expectederr = gson2.fromJson(payloadStr, Error.class);

И настройки 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>

Ответ 3

Если вы знакомы с Jackson 2, на mkyong.com есть отличное руководство по конвертации Java-объектов в JSON и наоборот. Следующие фрагменты кода были взяты из этого урока.

Преобразовать Java-объект в 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);

Преобразуйте JSON в объект 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);

Джексон 2 Зависимость:

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

Чтобы ознакомиться с полным руководством, перейдите по ссылке, указанной выше.

Ответ 4

Вы можете использовать Джексон API для преобразования

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

добавьте вышеуказанную maven-зависимость в POM, в вашем основном методе создайте ObjectMapper

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

позже нам нужно добавить наш класс POJO в маппер

String json = mapper.writeValueAsString(pojo);

Ответ 5

Используйте GSON для преобразования POJO в JSONObject. См. здесь.

Для преобразования JSONObject в POJO просто вызовите метод setter в POJO и назначьте значения непосредственно из JSONObject.