web-dev-qa-db-ja.com

GSONを使用してリストをJSONオブジェクトに変換する方法

GSONを使用してJSONオブジェクトに変換する必要があるリストがあります。 JSONオブジェクトにはJSON配列が含まれています。

public class DataResponse {

    private List<ClientResponse> apps;

    // getters and setters

    public static class ClientResponse {
        private double mean;
        private double deviation;
        private int code;
        private String pack;
        private int version;

        // getters and setters
    }
}

以下は、リストをJSON配列を持つJSONオブジェクトに変換する必要があるコードです-

public void marshal(Object response) {

    List<DataResponse.ClientResponse> clientResponse = ((DataResponse) response).getClientResponse();

    // now how do I convert clientResponse list to JSON Object which has JSON Array in it using GSON?

    // String jsonObject = ??
}

今のところ、リストには2つのアイテムしかありません-したがって、このようなJSONオブジェクトが必要です-

{  
   "apps":[  
      {  
         "mean":1.2,
         "deviation":1.3
         "code":100,
         "pack":"hello",
         "version":1
      },
      {  
         "mean":1.5,
         "deviation":1.1
         "code":200,
         "pack":"world",
         "version":2
      }
   ]
}

これを行う最良の方法は何ですか?

21
AKIWEB

responseメソッドのmarshalDataResponseである場合、それがシリアル化すべきものです。

Gson gson = new Gson();
gson.toJson(response);

これにより、探しているJSON出力が得られます。

26

リストをjson文字列に実際に変換する方法については、google gson documentation のサンプルがあります。

Type listType = new TypeToken<List<String>>() {}.getType();
 List<String> target = new LinkedList<String>();
 target.add("blah");

 Gson gson = new Gson();
 String json = gson.toJson(target, listType);
 List<String> target2 = gson.fromJson(json, listType);

toJsonメソッドでリストのタイプを設定し、リストオブジェクトを渡してjson文字列に変換するか、その逆に変換する必要があります。

55
Rod_Algonquin

あなたもjsonをフォーマットで取得したいと仮定します

{
  "apps": [
    {
      "mean": 1.2,
      "deviation": 1.3,
      "code": 100,
      "pack": "hello",
      "version": 1
    },
    {
      "mean": 1.5,
      "deviation": 1.1,
      "code": 200,
      "pack": "world",
      "version": 2
    }
  ]
}

の代わりに

{"apps":[{"mean":1.2,"deviation":1.3,"code":100,"pack":"hello","version":1},{"mean":1.5,"deviation":1.1,"code":200,"pack":"world","version":2}]}

pretty Printingを使用できます。使用するには

Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(dataResponse);
6
Pshemo