簡體   English   中英

GSON將json字符串轉換為對象; 得到零和0

[英]GSON converting json string to object; getting nulls and 0s

我在嘗試反序列化JSON字符串時遇到麻煩。 我正在使用gson

這是班

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會回復以下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

我可能錯過了一些東西...

您的課程與JSON不匹配。

JSON是一個包含一個字段(“筆記本”)的對象,該字段的值作為對象,其中包含您實際要查找的字段。

JSON需要看起來像:

{
  "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當前將映射到此:

public class NotebookContainer
{
    public Notebook notebook;
}

另一種方法:如果您可以控制Rails轉儲,則可以在開始通過to_json生成json之前使用ActiveRecord::Base.include_root_in_json = false忽略根元素。

我注意到您的幾個序列化名稱與json不匹配。 android_createdandroid_updated應該首先更新以匹配json。 這里可能還有其他問題,但這是一個突出的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM