[英]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_created
和android_updated
應該首先更新以匹配json。 這里可能還有其他問題,但這是一個突出的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.