Создать 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?
Ответы
Ответ 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