2

から JSON を生成するために Gson を使用しますList<Users>。次のようなヘッダー/ボディ構造を持つ JSON ドキュメントを生成したいと思います。

{
  "count" : 15,
  "users" : [
    {
      "userId" : 149,
      "userName" : "jack0231",
      "displayName" : "Jackie"
    },
    {
      "userId" : 301,
      "userName" : "helms_mighty",
      "displayName" : "Hippoman"
    }
...
  ]
}

現在、私は次のように自分で構造を書き出しています。

StringBuilder jsonResp = new StringBuilder();
jsonResp.append("{\"count\":"+users.size()+",");
jsonResp.append("\"users\":");
Gson gs = new Gson();
jsonResp.append(gs.toJson(users));
jsonResp.append("}");

これを行うためのより良い/組み込みの方法はありますか? ありがとう!

4

2 に答える 2

3

これが必要です。リストを別の (単純な) クラス内に配置すると、StringBuilder のボイラープレートをすべて回避して、1 つのステップで正しくシリアル化できます。この例を直接実行できます。

package stackoverflow.questions.q19966529;

import java.util.*;

import com.google.gson.Gson;

public class Q19966529 {

    public static class User{
        Long userId;
        String userName;
        String displayName;

        public User(Long userId, String userName, String displayName){
            this.userId = userId;
            this.userName = userName;
            this.displayName = displayName;             
        }
    }

    public static class UserList{
        private List<User> list = new ArrayList<>(); //java 7 
        private int count = 0;

        public void addUser(User u){
            list.add(u);
            count = list.size();

        }
    }

    public static void main(String[] args) {

        UserList ul = new UserList();
        ul.addUser(new User(149L, "jack0231", "Jackie"));
        ul.addUser(new User(301L, "helms_mighty", "Hippoman"));

        String json = new Gson().toJson(ul);
        System.out.println(json);
    }

}

これが結果です。

{"list":[{"userId":149,"userName":"jack0231","displayName":"Jackie"},{"userId":301,"userName":"helms_mighty","displayName":"Hippoman"}],"count":2}

例のようにフォーマットされていることを確認するには、このような外部フォーマッタが必要です

于 2013-11-14T00:07:55.110 に答える
0

SerializedUsersクラスを作成し、カウント データ用のフィールドと、ユーザー リスト用のフィールドを追加するのはどうでしょうか。このクラスをシリアライズするより。

于 2013-11-13T23:49:07.407 に答える