1

私は GSON について多くのサンプルとチュートリアルを試しました。

や。。など。

私の問題は、この json 値が my によって返されることhttp://localhost:3000/users/1.jsonです。これは次のとおりです。

{
  "created_at": "2012-09-20T01:43:15Z",
  "id": 1,
  "name": "kevin",
  "updated_at": "2012-09-20T01:43:15Z"
} 

もう1つはhttp://localhost:3000/users.json、json値を持つこのURLにあります

[ {
    "created_at": "2012-09-20T01:43:15Z",
    "id": 1,
    "name": "kevin",
    "updated_at": "2012-09-20T01:43:15Z"
  }, {
    "created_at": "2012-09-20T01:43:33Z",
    "id": 2,
    "name": "pineda",
    "updated_at": "2012-09-20T01:43:33Z"
  }, {
    "created_at": "2012-09-20T01:46:08Z",
    "id": 3,
    "name": "raphael",
    "updated_at": "2012-09-20T01:46:08Z"
  }, {
    "created_at": "2012-09-20T16:13:42Z",
    "id": 4,
    "name": null,
    "updated_at": "2012-09-20T16:13:42Z"
  }, {
    "created_at": "2012-09-20T16:18:03Z",
    "id": 5,
    "name": null,
    "updated_at": "2012-09-20T16:18:03Z"
  }, {
    "created_at": "2012-09-20T16:19:23Z",
    "id": 6,
    "name": null,
    "updated_at": "2012-09-20T16:19:23Z"
  }, {
    "created_at": "2012-09-20T16:20:41Z",
    "id": 7,
    "name": null,
    "updated_at": "2012-09-20T16:20:41Z"
  } 
]

そのようなデータを解析し、保存目的で取得するのに少し苦労しています。

4

1 に答える 1

2

JSON を解析するには、まずデータをラップするクラスを作成する必要があります。あなたの場合:

public class Item {
  @SerializedName("created_at")
  private String createdAt;
  @SerializedName("id")
  private int id;
  @SerializedName("name")
  private String name;
  @SerializedName("updated_at")
  private String updatedAt;
  //getters and setters
}

次に、最初のJSON 応答を解析するには、次のことを行う必要があります。

Gson gson = new Gson();
Item item = gson.fromJson(your1stJsonString, Item.class);

2 番目のJSON応答は、配列であるため、もう少し注意が必要です。問題は、単純にできないことです:

List<Item> item = gson.fromJson(your1stJsonString, List<Item>.class); //wrong!

前のコードは、Java が型 eraseList<Item>によりのクラスを認識できないため、失敗します。

したがって、次のようにする必要があります。

Type itemListType = new TypeToken<List<Item>>() {}.getType();
List<User> itemList = gson.fromJson(your2stJsonString, itemListType);

以上で、オブジェクト (またはオブジェクトのリスト) で JSON 応答を解析したら、取得したすべてのデータに通常どおりアクセスできます。

String name = itemList.get(i).getName();

注 1 : 属性 created_at と updated_at の型を just に設定したことに注意してください。これにより作業Stringが簡単になります。私は通常、この方法でそれを行い、次にDateまたはその他の競合型を解析します。とにかく、日付を直接解析したい場合は、Gson's User Guideに従ってCustom Deserializerを使用できると思います。


注 2 : Java の命名規則に従うために、アノテーションの使用は@SerializedName、JSON 応答とアプリでフィールドの名前を分離するのに興味深いものです...

于 2013-04-20T20:44:20.333 に答える