2011-12-30 5 views
1

JSON文字列を逆シリアル化しようとしています。私は、これはクラスJSON文字列をオブジェクトに変換するGSON。 nullと0を取得する

public class Notebook { 

    public static String DESCRIPTION = "description"; 

    @SerializedName("id")     private long id; 
    @SerializedName("user_id")   private long userId; 
    @SerializedName("description")  private String description; 
    @SerializedName("created_at")   private String railsCreated; 
    @SerializedName("updated_at")   private String railsUpdated;  
    @SerializedName("created_android") private String androidCreated; 
    @SerializedName("updated_android") private String androidUpdated; 
    private List<Note> notes; 
    private boolean isUploaded = false; 

    /*constructors, getters, and setters */ 

    public static void uploadNotebook(Notebook notebook) { 
    MultipartEntity entity = new MultipartEntity(); 
    HttpResponse response; 
    Notebook updatedNotebook = new Notebook(); 
    Gson gson = new Gson(); 
    try { 
    StringBody description = new StringBody(notebook.getDescription()); 
    StringBody user = new StringBody("1"); 
    StringBody format = new StringBody("json"); 
//  StringBody androidCreated = new StringBody(notebook.getAndroidCreated().toString()); 
//  StringBody androidUpdated = new StringBody(notebook.getAndroidUpdated().toString()); 
    entity.addPart("description", description); 
    entity.addPart("user_id", user); 
    entity.addPart("format", format); 
//   entity.addPart("android_created", androidCreated); 
//   entity.addPart("android_updated", androidUpdated); 
    response = WebService.postRequest(entity, WebService.POST_NOTEBOOK_URL); 
    String json = EntityUtils.toString(response.getEntity()); 
    Log.i("Note Uploader", json); 
    updatedNotebook = gson.fromJson(json, Notebook.class); 
    if(updatedNotebook != null) { 
     Log.i("Notebook ID", ""+updatedNotebook.getId()); 
     Log.i("Notebook userID", ""+updatedNotebook.getUserId()); 
     Log.i("Notebook Title", ""+updatedNotebook.getDescription()); 
     Log.i("Notebook CreatedAt", ""+updatedNotebook.getRailsCreated()); 
     Log.i("Notebook UpdatedAt", ""+updatedNotebook.getRailsUpdated()); 
     updatedNotebook.setUploaded(true); 
    } 
    } catch (UnsupportedEncodingException e) { 
     Log.i("Note Uploader", e.getMessage()); 
    } catch (ClientProtocolException e) { 
     Log.i("Note Uploader", e.getMessage()); 
    } catch (IOException e) { 
     Log.i("Note Uploader", e.getMessage()); 
    } 
    } 
} 

Railsのある

をgson使用しています私はポストを発行すると、次のJSONオブジェクトで応答:

{ 
    "notebook":{ 
    "created_android":null, 
    "created_at":"2011-12-30T06:35:42Z", 
    "description":"Tatata", 
    "id":12, 
    "updated_android":null, 
    "updated_at":"2011-12-30T06:35:42Z", 
    "user_id":1 
} 
} 

しかし、これは私がしようとしたとき、私が得るものですupdatedNotebookフィールドを印刷します。

12-30 14:35:42.673: INFO/Notebook ID(551): 0 
12-30 14:35:42.673: INFO/Notebook userID(551): 0 
12-30 14:35:42.673: INFO/Notebook Title(551): null 
12-30 14:35:42.673: INFO/Notebook CreatedAt(551): null 
12-30 14:35:42.673: INFO/Notebook UpdatedAt(551): null 

私はおそらく何かが欠けている...

答えて

4

あなたのクラスはJSONと一致しません。

JSONは、実際に探しているフィールドを含むオブジェクトを値として持つ1つのフィールド(「ノートブック」)を含むオブジェクトです。あなたのオブジェクトに正しくマップするには

{ 
    "created_android":null, 
    "created_at":"2011-12-30T06:35:42Z", 
    "description":"Tatata", 
    "id":12, 
    "updated_android":null, 
    "updated_at":"2011-12-30T06:35:42Z", 
    "user_id":1 
} 

JSONは次のように見てする必要があります。 修正が必要なフィールド名が一致していません 。あなたはそれらを持っているように見えます。

編集:は明確にするために、あなたが今持っているJSONは現在、これにマッピングします:

public class NotebookContainer 
{ 
    public Notebook notebook; 
} 
+0

フィギュア、仲間貯金者、歓声! –

+0

心配する必要はありません - うれしく思っています。 –

1

私はあなたのシリアライズされた名前のいくつかは、JSONと一致しないことに注意してください。 android_createdandroid_updatedは、jsonと一致するように最初に更新されている必要があります。ここに他の問題があるかもしれませんが、それは問題として際立っています。

+0

うわー...私はビールを非難する。それに感謝します!それを今更新しました –

1

別のアプローチを:あなたはRailsのダンプを管理している場合は、前ActiveRecord::Base.include_root_in_json = falseを使用してルート要素を無視することができますあなたのスタートはjsonを介して生成するto_json