如何获取仅包含Java中特定字段的对象列表?

时间:2018-06-23 09:28:20

标签: java json list arraylist

我有一个Person类型的对象的列表:

String id
String name
String address
String workPlace

我想创建一个新的列表,其中包含Person对象,但仅包含2个字段:id和name。 稍后我想从该列表创建一个json:

[
{
"id": "767384",
"name": "Bob",
},
{
"id": "202330",
"name": "Alice",
}
]

我该怎么办?谢谢!

2 个答案:

答案 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并将其添加到类路径中