Разбор вложенного массива JSON с GSON на Android

1

Я просмотрел форум и столкнулся с каким-то подобным вопросом, но ни одна из них не оказала никакой помощи.

Поэтому я занимаюсь тем, где кто-то еще остановился, и это проблема. Код, над которым я работаю, использует gson для синтаксического анализа потока json, и это прекрасно и понятно, затем соответствующие данные затем добавляются к посылке. Как ниже

public class JsonAssets{

    String Address;
    String Title;
    String File;
    Category [] Categories;

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();
}

public ContentValues getContentValues(){

    ContentValues contentValue = new ContentValues();
    contentValue.put("ID", this.Id);
    contentValue.put("Title", this.Title);
    contentValue.put("address", this.Address);
}

РЕДАКТИРОВАТЬ

private class Category{

   String CategoryName;
   String Description;
   String ExternalLink;
   String File;
   String FileName;
   int    CategoryID;
   int    ParentCategoryID;
   int    Id;
   int    Image;

public int getCategoryID(){

return this.Id;

}

}

Затем база данных обновляется с помощью этих contentValues.

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 недействителен, я только что отредактировал. Проблема в том, что у меня есть категории, вложенный массив, и я не знаю, как обращаться с этим массивом. Все, что я хочу получить, это "Id" в массиве "Категории".

Я не могу создать для него отдельный объект из-за того, как передается класс:

JsonReader reader = новый JsonReader (новый InputStreamReader (есть, "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;
            }

Поэтому, если бы кто-нибудь мог сказать мне, как с этим справиться, я бы очень признателен. Если я не очень ясно извиняюсь перед моим вопросом, просто спросите, и я уточню... спасибо заранее

Теги:
gson

2 ответа

1
Лучший ответ

Поэтому мне удалось правильно ответить на мой вопрос после нескольких часов и часов душераздирающих исследований.

Если у кого-то есть такая же проблема, просто следуйте по этой ссылке:
http://www.javacreed.com/gson-deserialiser-example/

Он позаботился о 1: правильно разобрал вложенный массив, и он также отменил его для меня.

4

1) Объявите свой объект как класс, который у вас действительно есть (JsonAsset)

JsonAsset obj = gson.fromJson(reader, JsonAsset.class);

2) Изменить класс для соответствия строке Json

public class JsonAssets{

String Address;
String Title;
String AudioFile;
Category[] Categories;
}

private class Category{

String CategoryName;
...
}

fromJson вернет полный инициализированный объект с вложенным массивом

  • 0
    Спасибо за ваш ответ. Итак, как я делал в классе JsonAsset, я делаю то же самое в классе Category или только для моих методов получения и установки? Затем я записываю Category [] в посылку в классе JsonAssets? Я предполагаю, что я должен также реализовать parcelable?
  • 0
    Я отредактировал свой вопрос, включив в него ваше предложение, я просто хочу получить «Id» из класса Category. Я просто не уверен, как написать это в посылку
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню