2

配列リストを特定の形式の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形式に変換するにはどうすればよいですか?

前もって感謝します

4

3 に答える 3

6

なぜ別のJSONser/ des libを使用するのですか?Playには1つの組み込みがあります(jacksonのラッパー-これは本当に高速です)。

コードから開始:

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は必要ありません。

于 2013-01-25T15:30:15.547 に答える
0

このライブラリを使用できます: 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();
}
于 2013-01-25T15:05:48.890 に答える
0

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));
于 2017-01-30T10:06:22.893 に答える