我有一个Person类型的对象的列表:
String id
String name
String address
String workPlace
我想创建一个新的列表,其中包含Person对象,但仅包含2个字段:id和name。 稍后我想从该列表创建一个json:
[
{
"id": "767384",
"name": "Bob",
},
{
"id": "202330",
"name": "Alice",
}
]
我该怎么办?谢谢!
答案 0 :(得分:0)
该库为com.google.gson.JsonArray和org.json.JSONObject
首先要做的是创建一个JSON数组。
JsonArray jsonPersonList = new JsonArray();
然后创建一个循环(假设有一个名为personList的列表)。
for(Person person : personList)
然后在循环内创建一个新的json对象。
JsonObject personJson = new JsonObject();
将person属性放在json对象中。
personJson.addProperty("id" , person.getId()); //Assuming getters,setters
personJson.addProperty("name" , person.getName());
在循环的最后,将personJson添加到JsonPersonList。
jsonPersonList.add(personJson);
循环后,您将拥有一个与所需人员一起的json列表。
示例方法:
public JsonArray getPersonJsonList(ArrayList<Person> personList){
JsonArray jsonPersonList = new JsonArray();
for(Person person : personList){
JsonObject personJson = new JsonObject();
personJson.addProperty("id" , person.getId());
personJson.addProperty("name" , person.getName());
jsonPersonList.add(personJson);
}
return jsonPersonList;
}
答案 1 :(得分:0)
您还可以像这样创建新的结果对象或DTO
public class ResultPerson {
String id;
String name;
public ResultPerson(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后您可以使用java流将“人”列表映射到新列表,并通过使用ObjectMapper将其转换为json
ObjectMapper objectMapper = new ObjectMapper();
List<ResultPerson> results = persons.stream().map(person -> new ResultPerson(person.getId(), person.getName()))
.collect(Collectors.toList());
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
try {
String json = ow.writeValueAsString(results);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
您需要添加 jackson-databind 作为依赖项:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
</dependency>
如果您不使用Maven,则可以下载jar并将其添加到类路径中