Android 获取嵌套的JSONObject&;使用改装库的阵列

Android 获取嵌套的JSONObject&;使用改装库的阵列,android,json,retrofit,Android,Json,Retrofit,我厌倦了使用这个库,这是我第一次使用它,并取得了很多成功,但我对获得以下Json有点困惑: { "Guides": { "English": {"ArabicSony":"Test1","ArabicNexus":"Test2","ArabicSamsung":"Test3","ArabicHTC":"Test4"} ,"Arabic": {"EnglishSony":"Test1","EnglishNexu

我厌倦了使用这个库,这是我第一次使用它,并取得了很多成功,但我对获得以下Json有点困惑:

{
  "Guides":
            {
            "English":    {"ArabicSony":"Test1","ArabicNexus":"Test2","ArabicSamsung":"Test3","ArabicHTC":"Test4"}
            ,"Arabic":    {"EnglishSony":"Test1","EnglishNexus":"Test2","EnglishSamsung":"Test3","EnglishHTC":"Test4"}
            }

}
谷歌搜索,看到了很多指南,并给出了答案,我的列表如下:

public class PostItem {

List<PostItemArabic> Arabic;
List<PostItemEnglish> English;

}

class PostItemArabic{

private String ArabicSony;
private String ArabicNexus;
private String ArabicSamsung;
private String ArabicHTC;

public String getArabicSony() {
    return ArabicSony;
}

public void setArabicSony(String arabicSony) {
    ArabicSony = arabicSony;
}

public String getArabicNexus() {
    return ArabicNexus;
}

public void setArabicNexus(String arabicNexus) {
    ArabicNexus = arabicNexus;
}

public String getArabicSamsung() {
    return ArabicSamsung;
}

public void setArabicSamsung(String arabicSamsung) {
    ArabicSamsung = arabicSamsung;
}

public String getArabicHTC() {
    return ArabicHTC;
}

public void setArabicHTC(String arabicHTC) {
    ArabicHTC = arabicHTC;
}

}

class PostItemEnglish{

private String EnglishSony;
private String EnglishNexus;
private String EnglishSamsung;
private String EnglishHTC;

public String getEnglishSony() {
    return EnglishSony;
}

public void setEnglishSony(String englishSony) {
    EnglishSony = englishSony;
}

public String getEnglishNexus() {
    return EnglishNexus;
}

public void setEnglishNexus(String englishNexus) {
    EnglishNexus = englishNexus;
}

public String getEnglishSamsung() {
    return EnglishSamsung;
}

public void setEnglishSamsung(String englishSamsung) {
    EnglishSamsung = englishSamsung;
}

public String getEnglishHTC() {
    return EnglishHTC;
}

public void setEnglishHTC(String englishHTC) {
    EnglishHTC = englishHTC;
}
}
                List<PostItem> Guides = response.body().getGuides();

            for(int i = 0 ; i < Guides.size() ; i ++ ) {
                for (int b = 0; b < Guides.get(i).English.size() ; b++){
                    Log.LogInfo("English Result Is: " + Guides.get(i).English.get(i).getEnglishHTC());
                    Log.LogInfo("English Result Is: " + Guides.get(i).English.get(i).getEnglishNexus());
                    Log.LogInfo("English Result Is: " + Guides.get(i).English.get(i).getEnglishSamsung());
                    Log.LogInfo("English Result Is: " + Guides.get(i).English.get(i).getEnglishSony());
                }
                for (int b = 0; b < Guides.get(i).Arabic.size() ; b++){
                    Log.LogInfo("Arabic Result Is: " + Guides.get(i).Arabic.get(i).getArabicHTC());
                    Log.LogInfo("Arabic Result Is: " + Guides.get(i).Arabic.get(i).getArabicNexus());
                    Log.LogInfo("Arabic Result Is: " + Guides.get(i).Arabic.get(i).getArabicSamsung());
                    Log.LogInfo("Arabic Result Is: " + Guides.get(i).Arabic.get(i).getArabicSony());
                }
            }

怎样才能使它正确`

当您尝试获取指南列表时,请根据您的型号选择您的改装以填充阵列。改造就是获取数据并发现它是单个对象而不是数组。因此,您需要更新模型以反映返回的数据。例如:

class PostItem {
   List<Language> mLanguages;
} 

class Language{
   String mLanguageTitle; //for example english
   List<String> mData; //for this is your list of data
}
response.body().getPostItem();

希望有帮助

首先,您可以使用改装Gson库

您可以通过两种方式处理此问题:

选项1:将json中的语言重新格式化为Doug所说的数组

{

"Guides":
        [
        {"Lang":"English","ArabicSony":"Test1","ArabicNexus":"Test2","ArabicSamsung":"Test3","ArabicHTC":"Test4"}
        ,   {"Lang":"Arabic","EnglishSony":"Test1","EnglishNexus":"Test2","EnglishSamsung":"Test3","EnglishHTC":"Test4"}
        ]

   }
然后需要重新设计类以反映这种结构。 就像Doug sayd:

 class PostItem {
     List<Language> mLanguages;
 } 

请解释更多,基于我的模型,基于你的模型,M语言=英语/阿拉伯语。。等
{

"Guides":
        [
        {"Lang":"English","ArabicSony":"Test1","ArabicNexus":"Test2","ArabicSamsung":"Test3","ArabicHTC":"Test4"}
        ,   {"Lang":"Arabic","EnglishSony":"Test1","EnglishNexus":"Test2","EnglishSamsung":"Test3","EnglishHTC":"Test4"}
        ]

   }
 class PostItem {
     List<Language> mLanguages;
 } 
public class PostItem implements JsonDeserializer

@Override
public MyDesirializer deserialize(JsonElement json, Type type,
    JsonDeserializationContext context) throws JsonParseException {

    JsonObject jarabic = (JsonObject) json.get("Arabic");
    //whatever manipulations you want to do (fill with your own code)
    PostItem item = new PostItem();
    item.arabic = jarabic;
    ...
    ...

    return item;
}