Java 将动态ArrayList转换为Json

Java 将动态ArrayList转换为Json,java,json,playframework-2.0,Java,Json,Playframework 2.0,我想将数组列表转换为特定格式的json字符串。我在一个数组列表中获取所有用户的电子邮件,并希望将其转换为以下JSON格式 [ {"email":"abc@gmail.com"}, {"email":"xyz@gmail.com"} ] 我的控制器操作是 public static Result apiCustomers(){ List<Customer> customerList = Model.coll(Customer.class).find().toAr

我想将数组列表转换为特定格式的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();
}
public静态结果apiCustomers(){
List customerList=Model.coll(Customer.class.find().toArray();
列出电子邮件=新建ArrayList();
for(客户c:客户列表){
电子邮件。添加(c.email);
}
//ObjectNode result=Json.newObject();
//result.put(“emails”,Json.toJson(emails));
返回ok();
}
如何将电子邮件列表转换为上述json格式

提前感谢

您可以使用此库:

关于它的简单教程如下:

或者,您可以为类或util Json编写自定义的toJson方法(没什么大不了的)

在您的情况下,应该是这样的(我没有测试它):

公共字符串toJson(列出电子邮件){
StringBuilder结果=新建StringBuilder();
结果。追加(“[”);
结果。追加(“\n”);
用于(字符串s:电子邮件){
结果。追加(“{”);
结果。追加(“\”电子邮件\“:”);
结果。追加(“\”);
结果。追加(s);
结果。追加(“\”);
result.append(“}”);
结果。追加(“,”);
结果。追加(“\n”);
}
结果。追加(“]”);
返回result.toString();
}

为什么要使用另一个JSON ser/des库?这个游戏有一个内置的(围绕着杰克逊的一个包装器,速度非常快)

从代码开始:

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静态结果apiCustomers(){
List customerList=Model.coll(Customer.class.find().toArray();
列出电子邮件=新建ArrayList();
for(客户c:客户列表){
电子邮件。添加(c.email);
}
返回ok(Json.toJson(email));
}
这使用了一些默认值,但应该足够了

或手动:

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);
}
public静态结果apiCustomers(){
ArrayNode ArrayNode=新的ArrayNode(JsonNodeFactory.instance);
List customerList=Model.coll(Customer.class.find().toArray();
for(客户c:客户列表){
ObjectNode mail=Json.newObject();
mail.put(“email”,c.email);
arrayNode.add(邮件);
}
返回ok(arrayNode);
}

不需要Gson。

得益于Java 8(我怀疑是更新的Jackson版本):

private static final ObjectMapper mapper=new ObjectMapper();
...
List customerList=Model.coll(Customer.class.find().toArray();
ArrayNode=mapper.createArrayNode();
customerList.forEach(c->email.add(c.email));

使用谷歌的Gson。绝对没有必要为这种问题伤脑筋。使用GSON生成JSON数据,然后将其转换为
RenderJson
result?我使用的是play2.0,我必须返回一个results类型的对象才能添加。必须从play.libs导入Json类,否则会出现错误
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);
}
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));