32

カスタムクラスのArrayListをJsonArrayに変換しようとしています。以下は私のコードです。正常に実行されますが、一部の JsonArray 要素は、ArrayList 内の数値であってもゼロになります。それらを印刷してみました。同様に、ArrayList の customerOne age は 35 ですが、JsonArray では 0 です。何が間違っている可能性がありますか?

    ArrayList<Customer> customerList = CustomerDB.selectAll();
    Gson gson = new Gson();

    JsonElement element = 
     gson.toJsonTree(customerList , new TypeToken<List<Customer>>() {}.getType());

    JsonArray jsonArray = element.getAsJsonArray();
4

7 に答える 7

42

以下のコードはあなたのケースでうまくいくはずです。

List<Customer> customerList = CustomerDB.selectAll();

Gson gson = new Gson();
JsonElement element = gson.toJsonTree(customerList, new TypeToken<List<Customer>>() {}.getType());

if (! element.isJsonArray() ) {
// fail appropriately
    throw new SomeException();
}

JsonArray jsonArray = element.getAsJsonArray();

JSONツリーを変換する前に、インターフェースを使用Listして値を収集してください。

于 2013-09-17T19:12:33.330 に答える
14

追加の回答として、短くすることもできます。

List<Customer> customerList = CustomerDB.selectAll();

JsonArray result = (JsonArray) new Gson().toJsonTree(customerList,
            new TypeToken<List<Customer>>() {
            }.getType());
于 2015-09-22T10:57:14.077 に答える
5

このソリューションが他の回答と比較してどれだけうまく機能するかはわかりませんが、これは別の方法であり、非常にクリーンで、ほとんどの場合に十分なはずです。

ArrayList<Customer> customerList = CustomerDB.selectAll();
Gson gson = new Gson();
String data = gson.toJson(customerList);
JsonArray jsonArray = new JsonParser().parse(data).getAsJsonArray();

これが実際に非効率的であるかどうか、そしてどのように非効率的であるかについて、他の誰かから聞いてみたいと思います.

于 2016-12-29T13:16:51.283 に答える
3

タイプのオブジェクトのリストを検討してくださいModel.class

ArrayList<Model> listOfObjects = new ArrayList<Model>();

JSONへのリスト

String jsonText =  new Gson().toJson(listOfObjects);

JSON から LIST

 Type listType = new TypeToken<List<Model>>() {}.getType();

 List<Model> myModelList = new Gson().fromJson(jsonText , listType);
于 2017-12-25T13:49:45.007 に答える
2

List<> は通常の Java オブジェクトであり、標準の gson オブジェクト API を使用して正常に変換できます。gson のリストは次のようになります。

"libraries": [
    {
      //Containing object 
    },
    {
      //Containing object 
    }
   ],
...
于 2013-09-17T19:14:20.970 に答える
-2

google gson jar を使用します。以下のサンプル コードを参照してください。

    public class Metric {
        private int id;
        ...
       setter for id
        ....
       getter for id
    }

    Metric metric = new Metric();
    metric.setId(1);

    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.serializeNulls();
    Gson gson = gsonBuilder.create();
    System.out.println(gson.toJson(metric));

StringBuffer jsonBuffer = new StringBuffer("{ \"rows\": [");
List<Metric> metrices = new ArrayList<Metric>();
// assume you have more elements in above arraylist
boolean first = true;
for (Metric metric : metrices) {
       if (first)
      first = false;
    else
      jsonBuffer.append(",");
      jsonBuffer.append(getJsonFromMetric(metric));
}
jsonBuffer.append("]}");

private String getJsonFromMetric(Metric metric) {
GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.serializeNulls();
    Gson gson = gsonBuilder.create();
    return gson.toJson(metric);
}
于 2013-09-17T19:21:04.807 に答える