簡體   English   中英

如何獲取僅包含Java中特定字段的對象列表?

[英]How to get a list of objects contained only specific fields in Java?

我有一個來自Person類型的對象的列表:

String id
String name
String address
String workPlace

我想創建一個新的列表,其中包含Person對象,但僅包含2個字段:id和name。 我想稍后從該列表創建一個json,如下所示:

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

我該怎么做? 謝謝!

該庫是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;
}

您還可以像這樣創建新的結果對象或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並將其添加到類路徑中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM