簡體   English   中英

將動態ArrayList轉換為Json

[英]Converting Dynamic ArrayList to Json

我想將數組列表轉換為特定格式的json字符串。 我將所有用戶電子郵件發送到數組列表中,並希望將其轉換為以下JSON格式。

 [
  {"email":"abc@gmail.com"},
  {"email":"xyz@gmail.com"}
 ]

我的控制器動作是

 public static Result apiCustomers(){
    List<Customer> customerList = Model.coll(Customer.class).find().toArray();
    List<String> emails = new ArrayList<String>();

    for(Customer c : customerList){
        emails.add(c.email);
    }

    //ObjectNode result = Json.newObject();
    //result.put("emails", Json.toJson(emails));        
    return ok();
}

如何將電子郵件列表轉換為上述json格式?

提前致謝

為什么要使用另一個JSON ser / des lib? Play內置了一個(傑克遜周圍的包裝器-速度非常快)。

從您的代碼開始:

public static Result apiCustomers(){
    List<Customer> customerList = Model.coll(Customer.class).find().toArray();
    List<String> emails = new ArrayList<String>();

    for(Customer c : customerList){
        emails.add(c.email);
    }

    return ok(Json.toJson(emails));
}

這使用一些默認值,但應該足夠了。

或手動:

public static Result apiCustomers(){
        ArrayNode arrayNode = new ArrayNode(JsonNodeFactory.instance);

        List<Customer> customerList = Model.coll(Customer.class).find().toArray();

        for(Customer c : customerList){
            ObjectNode mail = Json.newObject();
            mail.put("email", c.email);
            arrayNode.add(mail);
        }

        return ok(arrayNode);
}

不需要Gson。

您可以使用以下庫: http : //code.google.com/p/google-gson/

關於此的非常簡單的教程: http : //www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/

或者,您可以將自定義的toJson方法寫入您的類或util Json(沒什么大不了的)

在你的情況下應該是這樣的(我沒有測試):

public String toJson(List<String> emails) {
    StringBuilder result = new StringBuilder();
    result.append("[");
    result.append("\n");

    for (String s : emails) {
        result.append("{");
        result.append("\"email\":");
        result.append("\"");
        result.append(s);
        result.append("\"");
        result.append("}");
        result.append(",");
        result.append("\n");
    }
    result.append("]");
    return result.toString();
}

受益於Java 8(我懷疑是Jackson的較新版本):

private static final ObjectMapper mapper = new ObjectMapper();

...

List<Customer> customerList = Model.coll(Customer.class).find().toArray();
ArrayNode emails = mapper.createArrayNode();
customerList.forEach(c -> emails.add(c.email));

暫無
暫無

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

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