我有一个用Gson解析的JSON文件。我遇到的问题是Json中有嵌套数组,例如
"assets":[
{
"Address":"Crator1, The Moon",
"Title":"The Moon",
"AudioFile":null,
"Categories":[
{
"CategoryName":"Restaurants",
"Description":"blah blah",
"ExternalLink":"",
"File":"",
"FileName":"0",
"CategoryID":0,
"ParentCategoryID":786,
"Id":334,
"Image":"",
},
我知道这是无效的,这只是一个例子。所以基于我之前提出的问题和研究,我认为我应该按照以下方式编写代码,以正确解析JSON:
public class JsonAssets implements Parcelable{
String Address;
String Title;
String AudioFile;
Categories[] categories;
private class Categories{
String CategoryName;
String Description;
String ExternalLink;
String File;
String FileName;
int CategoryID;
int ParentCategoryID;
int Id;
String Image;
}
}
该类传递如下:
JsonReader reader = new JsonReader(new InputStreamReader(is, "UTF-8"));
reader.beginObject();
reader.nextName();
reader.beginArray();
JsonObject obj = null;
while (reader.hasNext()) {
try{
switch(type){
case ASSET_UPDATE:
obj = gson.fromJson(reader, JsonAsset.class);
break;
}
所以我读取和写入地址,音频文件如下:
public static final Parcelable.Creator<AssetJson> CREATOR = new Parcelable.Creator<AssetJson>() {
public AssetJson createFromParcel(Parcel in) {
return new AssetJson(in);
}
public AssetJson[] newArray(int size) {
return new AssetJson[size];
}
};
public void writeToParcel(Parcel paramParcel, int paramInt) {
paramParcel.writeString(Address);
paramParcel.writeString(Title);
paramParcel.writeString(AudioFile);
}
private JsonAsset(Parcel in) {
Address = in.readString();
Title = in.readString();
AudioFile = in.readString();
}
我遇到的问题是我不知道如何读取和写入包裹的类别[]。事实上,它是一个对象数组让我难过。
这是我对parcelables的第一次体验,我正试图接管别人的代码。因此,如果有人能解释我将如何包裹对象数组,我将非常感激。
谢谢!
答案 0 :(得分:1)
简单,首先让你的Category类实现Parcelable,实现所有读写逻辑,然后使用Parcel类writeParcelableArray
方法编写一个parcelables数组。
希望得到这个帮助。
答案 1 :(得分:0)
我设法找到了正确的解决方案(对我来说),所以如果有其他人反对这一点,请点击此链接: http://www.javacreed.com/gson-deserialiser-example/
它显示了如何解析嵌套数组和反序列化。