2012-02-06 11 views
1

を(gsonを使用して)私はこのようなJSON文字列を持っています。しかし、私は質問があります。新しい応答では、user要素にはジェネリックIDがキーとして含まれており、内部クラスにあるため、解析する方法がわかりません。これらのJSON文字列を解析するには?私はそれらを解析するgsonを使用しようとしている <a href="http://pastebin.com/ckUZadwL" rel="nofollow">http://pastebin.com/ckUZadwL</a></p> <p>:

ありがとうございました。ここで

は私がそこにデータを保存するために構築し、いくつかのクラスのコンテナである:私はあなたについて共有するには、いくつかのものを持って

public class CometCallback 
{ 
    public int new_offset; 
    public Data[] data; 
} 

public class Data 
{ 
    public long plurk_id; 
    public int response_count; 
    public Response response; 
    public UserInfo user; 
    public String type; 
    public Plurk plurk; 
} 

public class Response 
{ 
    public String lang; 
    public String content_raw; 
    public long user_id; 
    public String qualifier; 
    public long plurk_id; 
    public String content; 
    public long id; 
    public String posted; 
} 

public class Plurk extends Response 
{ 
    public Object[] replurkers; 
    public int responses_seen; 
    public int replurkers_count; 
    public String replurker_id; 
    public int response_count; 
    public boolean replurkable; 
    public Object limited_to; 
    public int favorite_count; 
    public int is_unread; 
    public Object[] favorers; 
    public int plurk_type; 
    public boolean replurked; 
    public boolean favorite; 
    public int no_comments; 
    public long owner_id; 
} 

答えて

1

をポスト:

  1. あなたが直面する最大の問題は、ということであるユーザー非常に奇妙です jsonのシリアル化 - そのIDはキーとして使用されます。私が考えることができる唯一の方法はのenableComplexMapKeySerializationオプションを使用することです。次に、UsewrInfoを1つの要素Map<Integer, User>を含むものとして宣言し、すべての属性がidにマップされたUserのBeanを宣言する必要があります。
  2. gsonでは、gsonのキーと一致するクラスフィールド名を にする必要はありません。たとえば、 では、キャメルケースのnewOffsetを使用して、new_offsetフィールドを解析することができます。 フィールドの宣言の上にgson注釈 @SerializedName("new_offser")を置くだけで済みます。
  3. gsonを使用してjsonからデシリアライズを行う方法は次のとおりです。それは本当にまっすぐ前方 です:私は、次のセクションでDateFormatのオプションについて説明します

    Gson gson = new GsonBuilder() 
        .enableComplexMapKeySerialization() 
        .serializeNulls() 
        .setDateFormat(MY_DATE_FORMAT) 
        .create(); 
    CometCallback cometCallback = gson.fromJson(jsonFile, CometCallback.class) ; 
    

    。 の値も"date_of_birth": nullのようにシリアライズされているため、 serializeNullsが必要です。

  4. についてDateFormatについて - public String posted; を文字列として宣言しました。しかしgsonは、限り、あなたは日付 がになります正確な形式を指定するようまっすぐあなたのためのJSON 文字列から日付を解析することができますここで私はあなたがあなたの日付 で定義だと思う正確な形式である:。

    public static final SimpleDateFormat MY_DATE_FORMAT = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z"); 
    
    は、

    これを宣言して setDateFormat(MY_DATE_FORMAT)メソッドに渡すと、 すべての日付が日付として読み取られ、gsonがそれらを解析します。

  5. ところで、私はあなたがそれを知っていると思いますが、例えば、リストにjson 配列をデシリアライズすることができます。これは、 フィールドをそれに応じて宣言するだけで、自動的にgsonがフィールドに格納されます。

これがすべてあなたのデータを逆シリアル化するのに役立ちます。ハッピーコーディング!

+0

ありがとう、私は今試してみるいくつかのことがあります:) – Patrick

+0

おかげで情報。私は今私が望む価値を引き出すことができるようです!私は "enableComplexMapKeySerialization"が何をするかを理解するために、さらにいくつかをテストする必要があります。 – Patrick

+0

Hum ... ComplexMapKeySerializationを有効にしなくてもMapオブジェクトにデシリアライズされているようです。私は、Map は複雑なキーではないと思いますが、これからは複雑なキーを解析することができます。 – Patrick

関連する問題