我创建了一个简单的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?
答案 0 :(得分:28)
只需使用java Gson API:
Gson gson = new GsonBuilder().create();
String json = gson.toJson(obj);// obj is your object
然后你可以从这个json JSONObject
创建一个String
,如下所示:
JSONObject jsonObj = new JSONObject(json);
请查看Gson user guide和此SIMPLE GSON EXAMPLE以获取更多信息。
答案 1 :(得分:4)
Jackson
提供JSON解析器/ JSON生成器作为基础构建块;并添加了强大的Databinder(JSON< - > POJO)和树模型作为可选的附加块。这意味着您可以作为标记流(Streaming API),简单旧Java对象(POJO,数据绑定)或树(树模型)来读写JSON。 for more reference
您必须添加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("a@a.com");
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":"a@a.com","password":"abc"}
答案 2 :(得分:4)
可以从POJO中获取(gson)JsonObject:
JsonElement element = gson.toJsonTree(userNested);
JsonObject object = element.getAsJsonObject();
之后,您可以object.entrySet()
查看所有树。
这是GSON唯一绝对免费的方式,可以动态更改您想要查看的字段。
答案 3 :(得分:2)
JSONObject input = new JSONObject(pojo);
此版本适用于最新版本。
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180130</version>
</dependency>
答案 4 :(得分:2)
您还可以将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);
}
}
答案 5 :(得分:2)
您可以使用以下解决方案:
SetValues
答案 6 :(得分:0)
我在我的项目中使用jackson,但我认为你需要一个空的构造函数。
public LoginPojo(){
}
答案 7 :(得分:0)
您可以使用
<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