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

Создать JSONObject из POJO

Я создал простое POJO:

public class LoginPojo {
    private String login_request = null;
    private String email = null;
    private String password = null;

    // getters, setters
}

После некоторых поисков я нашел это: JSONObject jsonObj = new JSONObject( loginPojo );

Но с этим я получил ошибку:

The constructor JSONObject(LoginPojo) is undefined

Я нашел другое решение:

JSONObject loginJson = new JSONObject();
loginJson.append(loginPojo);

Но этот метод не существует.

Итак, как я могу конвертировать POJO в JSON?

4b9b3361

Ответ 1

Просто используйте Java Gson API:

Gson gson = new GsonBuilder().create();
String json = gson.toJson(obj);// obj is your object 

И затем вы можете создать JSONObject из этого json String, например так:

JSONObject jsonObj = new JSONObject(json);

Посмотрите руководство пользователя Gson и этот ПРОСТОЙ ПРИМЕР GSON для получения дополнительной информации.

Ответ 2

Jackson обеспечивает генератор JSON/JSON в качестве основного строительного блока; и добавляет мощный Databinder (JSON ↔ POJO) и Tree Model в качестве дополнительных блоков дополнения. Это означает, что вы можете читать и писать JSON либо как поток токенов (Streaming API), либо как обычные объекты Java (POJO, databind), либо как деревья (Tree Model). для дополнительной справки

Вам нужно добавить библиотеки jackson-core-asl-x.x.x.jar, jackson-mapper-asl-x.x.x.jar для настройки Jackson в вашем проекте.

Измененный код:

LoginPojo loginPojo = new LoginPojo();
ObjectMapper mapper = new ObjectMapper();

try {
    mapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);

    // Setting values to POJO
    loginPojo.setEmail("[email protected]");
    loginPojo.setLogin_request("abc");
    loginPojo.setPassword("abc");

    // Convert user object to json string
    String jsonString = mapper.writeValueAsString(loginPojo);

    // Display to console
    System.out.println(jsonString);

} catch (JsonGenerationException e){
    e.printStackTrace();
} catch (JsonMappingException e){
    e.printStackTrace();
} catch (IOException e){
    e.printStackTrace();
}

Output : 
{"login_request":"abc","email":"[email protected]","password":"abc"}

Ответ 3

Можно получить (gson) JsonObject из POJO:

JsonElement element = gson.toJsonTree(userNested);
JsonObject object = element.getAsJsonObject();

После этого вы можете взять object.entrySet() и посмотреть все дерево.

Это единственный абсолютно бесплатный способ в GSON динамически изменять, какие поля вы хотите видеть на самом деле.

Ответ 4

JSONObject input = new JSONObject(pojo);

Это работало с последней версией.

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180130</version>
</dependency>

Ответ 5

Вы также можете использовать project lombok с Gson, переопределяющим функцию toString. Он автоматически включает компоновщики, геттеры и сеттеры, чтобы упростить назначение данных следующим образом:

User user = User.builder().username("test").password("test").build();

Найдите ниже пример класса:

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import com.google.gson.Gson;

@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class User {
    /* User name. */
    private String username;
    /* Password. */
    private String password;

    @Override
    public String toString() {
        return new Gson().toJson(this, User.class);
    }

    public static User fromJSON(String json) {
        return new Gson().fromJson(json, User.class);
    }
}

Ответ 6

Я использую jackson в моем проекте, но я думаю, что вам нужен пустой конструктор.

public LoginPojo(){
}

Ответ 7

Вы можете использовать

 <dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>fastjson</artifactId>
   <version>1.2.13</version>
 </dependency>

Чтобы создать объект JSON:

@Test
public void whenGenerateJson_thanGenerationCorrect() throws ParseException {
    JSONArray jsonArray = new JSONArray();
    for (int i = 0; i < 2; i++) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("AGE", 10);
        jsonObject.put("FULL NAME", "Doe " + i);
        jsonObject.put("DATE OF BIRTH", "2016/12/12 12:12:12");
        jsonArray.add(jsonObject);
    }
    String jsonOutput = jsonArray.toJSONString();
}

Добавьте аннотации к вашему классу POJO следующим образом:

@JSONField(name = "DATE OF BIRTH")
private String dateOfBirth;
etc...

Тогда вы можете просто использовать:

@Test
public void whenJson_thanConvertToObjectCorrect() {
    Person person = new Person(20, "John", "Doe", new Date());
    String jsonObject = JSON.toJSONString(person);
    Person newPerson = JSON.parseObject(jsonObject, Person.class);

    assertEquals(newPerson.getAge(), 0); // if we set serialize to false
    assertEquals(newPerson.getFullName(), listOfPersons.get(0).getFullName());
}

Вы можете найти более полное руководство на следующем сайте:https://www.baeldung.com/fastjson