2016-12-06 152 views
0

我对Json与Gson的解析非常熟悉。我使用Gson完成了Json解析,但最近我有多个json对象与响应,我越来越有点解析,这里是我的代码,任何人都可以帮助我解决我的问题,我做错了。Android Json与GSON解析?

在此先感谢

这里是我的JSON响应: - Json response

这里是我的POGO类解析: -

风格Profile.java

public class StyleProfile implements Parcelable { 

@SerializedName("user_name") 
@Expose 
private String user_name; 
@SerializedName("user_picture") 
@Expose 
private String user_picture; 

@SerializedName("user_attr") 
@Expose 
private UserAttrEntity user_attr; 

@SerializedName("user_attributes") 
@Expose 
private UserAttributes userAttributes; 

@SerializedName("style_attr") 
@Expose 
private StyleAttr style_attr; 

private StyleAttrEntity style_attrEntity; 


private UserAttributesEntity user_attributes; 
private String user_style; 
@SerializedName("user_background_image") 
@Expose 
private String userBackgroundImage; 
@SerializedName("user_style_message") 
@Expose 
private String userStyleMessage; 
private String user_style_message; 
private List<String> style_message; 

public StyleProfile() { 

} 

protected StyleProfile(Parcel in) 
{ 
    user_name = in.readString(); 
    user_picture = in.readString(); 
    user_style = in.readString(); 
    // style_message = in.readString(); 
} 

public static final Creator<StyleProfile> CREATOR = new Creator<StyleProfile>() { 
    @Override 
    public StyleProfile createFromParcel(Parcel in) { 
     return new StyleProfile(in); 
    } 

    @Override 
    public StyleProfile[] newArray(int size) { 
     return new StyleProfile[size]; 
    } 
}; 

public StyleAttr getStyle_attr() { 
    return style_attr; 
} 

public void setStyle_attr(StyleAttr style_attr) { 
    this.style_attr = style_attr; 
} 

public String getName() { 
    return user_name; 
} 

public void setName(String name) { 
    this.user_name = name; 
} 

public String getImage() { 
    return user_picture; 
} 

public void setImage(String image) { 
    this.user_picture = image; 
} 

public UserAttrEntity getUser_attr() { 
    return user_attr; 
} 

public void setUser_attributes(UserAttributesEntity user_attributes) { 
    this.user_attributes = user_attributes; 
} 

public void setUser_style(String user_style) { 
    this.user_style = user_style; 
} 

public String getUser_style() { 
    return user_style; 
} 

public List<String> getStyle_message() { 
    return style_message; 
} 

public void setStyle_message(List<String> style_message) { 
    this.style_message = style_message; 
} 

public String getStyleMessageAsString() { 
    return TextUtils.join(". ", style_message); 
} 

public void setUser_style_message(String user_style_message) { 
    this.user_style_message = user_style_message; 
} 

public String getUser_style_message() { 
    return user_style_message; 
} 

public UserAttributesEntity getUser_attributes() { 
    return user_attributes; 
} 

public void setUser_attr(UserAttrEntity user_attr) { 
    this.user_attr = user_attr; 
} 

public UserAttributes getUserAttr() { 
    return userAttributes; 
} 

public void setUserAttr(UserAttributes userAttr) { 
    this.userAttributes = userAttr; 
} 

public UserAttributes getUserAttributes() { 
    return userAttributes; 
} 

public void setUserAttributes(UserAttributes userAttributes) { 
    this.userAttributes = userAttributes; 
} 

public String getUserStyle() { 
    return user_style; 
} 

public void setUserStyle(String userStyle) { 
    this.user_style = userStyle; 
} 

public String getUserBackgroundImage() { 
    return userBackgroundImage; 
} 

public void setUserBackgroundImage(String userBackgroundImage) { 
    this.userBackgroundImage = userBackgroundImage; 
} 

public String getUserStyleMessage() { 
    return userStyleMessage; 
} 

public void setUserStyleMessage(String userStyleMessage) { 
    this.userStyleMessage = userStyleMessage; 
} 

@Override 
public int describeContents() { 
    return 0; 
} 

public StyleAttrEntity getStyle_attrEntity() { 
    return style_attrEntity; 
} 

public static Creator<StyleProfile> getCREATOR() { 
    return CREATOR; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(user_name); 
    dest.writeString(user_picture); 
    dest.writeParcelable(user_attr, flags); 
    dest.writeParcelable(style_attr, flags); 
    dest.writeString(user_style); 
} 

public void setStyle_attrEntity(StyleAttrEntity style_attrEntity) { 
    this.style_attrEntity = style_attrEntity; 
} 

public static class StyleAttr implements Parcelable { 

    @SerializedName("Edgy") 
    @Expose 
    private Integer edgy; 
    @SerializedName("Feminine") 
    @Expose 
    private Integer feminine; 
    @SerializedName("Fashion Forward") 
    @Expose 
    private Integer fashionForward; 
    @SerializedName("Classic") 
    @Expose 
    private Integer classic; 
    @SerializedName("Casual") 
    @Expose 
    private Integer casual; 
    @SerializedName("Bohemian") 
    @Expose 
    private Integer bohemian; 

    protected StyleAttr(Parcel in) { 
     edgy = in.readInt(); 
     casual = in.readInt(); 
     classic = in.readInt(); 
     edgy = in.readInt(); 
     fashionForward = in.readInt(); 
     feminine = in.readInt(); 
    } 

    public static final Creator<StyleAttr> CREATOR = new Creator<StyleAttr>() { 
     @Override 
     public StyleAttr createFromParcel(Parcel in) { 
      return new StyleAttr(in); 
     } 

     @Override 
     public StyleAttr[] newArray(int size) { 
      return new StyleAttr[size]; 
     } 
    }; 

    public void setBohemian(int Bohemian) { 
     this.bohemian = Bohemian; 
    } 

    public void setCasual(int Casual) { 
     this.casual = Casual; 
    } 

    public void setClassic(int Classic) { 
     this.classic = Classic; 
    } 

    public void setEdgy(int Edgy) { 
     this.edgy = Edgy; 
    } 

    public void setFashionForward(int FashionForward) { 
     this.fashionForward = FashionForward; 
    } 

    public void setFeminine(int Feminine) { 
     this.feminine = Feminine; 
    } 

    public int getBohemian() { 
     return bohemian; 
    } 

    public int getCasual() { 
     return casual; 
    } 

    public int getClassic() { 
     return classic; 
    } 

    public int getEdgy() { 
     return edgy; 
    } 

    public int getFashionForward() { 
     return fashionForward; 
    } 

    public int getFeminine() { 
     return feminine; 
    } 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeInt(bohemian); 
     dest.writeInt(casual); 
     dest.writeInt(classic); 
     dest.writeInt(edgy); 
     dest.writeInt(fashionForward); 
     dest.writeInt(feminine); 
    } 
} 

}

UserAttrEntity.java

public class UserAttrEntity implements Parcelable { 

@SerializedName("Size") 
private String Size = ""; 
@SerializedName("Shape") 
private String Shape = ""; 

@SerializedName("Bottoms Size") 
private String Bottoms_Size = ""; 

@SerializedName("Height") 
private String Height = ""; 
@SerializedName("Shoes Size") 
private String Shoes_Size = ""; 
@SerializedName("Complexion") 
private String Face_Color = ""; 
@SerializedName("Face Shape") 
private String Face_Shape = ""; 

public UserAttrEntity() { 

} 

protected UserAttrEntity(Parcel in) { 
    Shape = in.readString(); 
    Size = in.readString(); 
    Bottoms_Size = in.readString(); 
    Height = in.readString(); 
    Shoes_Size = in.readString(); 
    Face_Color = in.readString(); 
    Face_Shape = in.readString(); 
} 

public static final Creator<UserAttrEntity> CREATOR = new Creator<UserAttrEntity>() { 
    @Override 
    public UserAttrEntity createFromParcel(Parcel in) { 
     return new UserAttrEntity(in); 
    } 

    @Override 
    public UserAttrEntity[] newArray(int size) { 
     return new UserAttrEntity[size]; 
    } 
}; 

public void setShape(String Shape) { 
    this.Shape = Shape; 
} 

public void setSize(String Size) { 
    this.Size = Size.replace("\n", " "); 
} 

public void setBottoms_Size(String Bottoms_Size) { 
    this.Bottoms_Size = Bottoms_Size + " Inch"; 
} 

public void setHeight(String Height) { 
    this.Height = Height; 
} 

public void setShoes_Size(String Shoes_Size) { 
    this.Shoes_Size = Shoes_Size; 
} 

public void setFace_Color(String Face_Color) { 
    this.Face_Color = Face_Color; 
} 

public void setFace_Shape(String Face_Shape) { 
    this.Face_Shape = Face_Shape; 
} 

public String getShape() { 
    return Shape; 
} 

public String getSize() { 
    return Size; 
} 

public String getBottoms_Size() { 
    return Bottoms_Size; 
} 

public String getHeight() { 
    return Height; 
} 

public String getShoes_Size() { 
    return Shoes_Size; 
} 

public String getFace_Color() { 
    return Face_Color; 
} 

public String getFace_Shape() { 
    return Face_Shape; 
} 

@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(Shape); 
    dest.writeString(Size); 
    dest.writeString(Bottoms_Size); 
    dest.writeString(Height); 
    dest.writeString(Shoes_Size); 
    dest.writeString(Face_Color); 
    dest.writeString(Face_Shape); 
} 
} 

用户AttributesEntity.java

public class UserAttributes { 
@SerializedName("Size") 
@Expose 
private Size size; 
@SerializedName("Shape") 
@Expose 
private Shape shape; 
@SerializedName("Bottoms Size") 
@Expose 
private BottomsSize bottomsSize; 
@SerializedName("Height") 
@Expose 
private Height height; 
@SerializedName("Shoes Size") 
@Expose 
private ShoesSize shoesSize; 
@SerializedName("Complexion") 
@Expose 
private Complexion complexion; 
@SerializedName("Face Shape") 
@Expose 
private FaceShape faceShape; 

public Size getSize() { 
    return size; 
} 

public void setSize(Size size) { 
    this.size = size; 
} 

public Shape getShape() { 
    return shape; 
} 

public void setShape(Shape shape) { 
    this.shape = shape; 
} 

public BottomsSize getBottomsSize() { 
    return bottomsSize; 
} 

public void setBottomsSize(BottomsSize bottomsSize) { 
    this.bottomsSize = bottomsSize; 
} 

public Height getHeight() { 
    return height; 
} 

public void setHeight(Height height) { 
    this.height = height; 
} 

public ShoesSize getShoesSize() { 
    return shoesSize; 
} 

public void setShoesSize(ShoesSize shoesSize) { 
    this.shoesSize = shoesSize; 
} 

public Complexion getComplexion() { 
    return complexion; 
} 

public void setComplexion(Complexion complexion) { 
    this.complexion = complexion; 
} 

public FaceShape getFaceShape() { 
    return faceShape; 
} 

public void setFaceShape(FaceShape faceShape) { 
    this.faceShape = faceShape; 
} 
} 

风格Profile.java

我在这里使用它像这样

Profile profile = gson.fromJson(obj.toString(), Profile.class); 
Log.e("", "profile.getStatus() " + profile.getStatus()); 
mReceiver.onResponse(profile, tag); 

回答

1

尝试这种方式

//主数据

public class MainData{ 

@SerializedName("status") 
@Expose 
private String status; 
@SerializedName("data") 
@Expose 
private Data data; 


} 

//数据

public class Data { 

    @SerializedName("user_name") 
    @Expose 
    private String userName; 
    @SerializedName("user_picture") 
    @Expose 
    private String userPicture; 
    @SerializedName("user_attr") 
    @Expose 
    private UserAttr userAttr; 
    @SerializedName("user_attributes") 
    @Expose 
    private UserAttributes userAttributes; 
    @SerializedName("style_attr") 
    @Expose 
    private StyleAttr styleAttr; 
    @SerializedName("user_style") 
    @Expose 
    private String userStyle; 
    @SerializedName("user_background_image") 
    @Expose 
    private String userBackgroundImage; 
    @SerializedName("user_style_message") 
    @Expose 
    private String userStyleMessage; 
} 

// user_attr中

public class UserAttr { 

    @SerializedName("user_attr") 
    private Map<String, String> userAttributes; 

    public Map<String, String> getUserAttributes() { 
     return userAttributes; 
    } 

    public void setUserAttributes(Map<String, String> userattributes) { 
     this.userAttributes= userattributes; 
    } 
} 

// user_attributes

public class UserAttributes { 

    @SerializedName("user_attributes") 
    private Map<String, CommonUserAttributes> userAttributes; 

    public Map<String, CommonUserAttributes> getUserAttributes() { 
     return userAttributes; 
    } 

    public void setUserAttributes(Map<String, CommonUserAttributes> userattributes) { 
     this.userAttributes = userattributes; 
    } 
} 

// StyleAttr

public class StyleAttr { 

    @SerializedName("style_attr") 
    private Map<String, Integer> styleAttributes; 

    public Map<String, Integer> getStyleAttributes() { 
     return styleAttributes; 
    } 

    public void setStyleAttributes(Map<String, Integer> styleAttributes) { 
     this.styleAttributes = styleAttributes; 
    } 
} 

// CommonUserAttributes

public class CommonUserAttributes { 

    @SerializedName("user_attr") 
    private String value; 
    @SerializedName("que_id") 
    private String bottmque_id; 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 

    public String getBottmque_id() { 
     return bottmque_id; 
    } 

    public void setBottmque_id(String bottmque_id) { 
     this.bottmque_id = bottmque_id; 
    } 
} 

把你弄,自己设置方法。

+0

期待这个其他的东西是正确的? –

+0

我有点迷惑你能否请exaplain? –

+0

这里使用的是地图类型,它会自动映射所有的密钥对值。如果你想在将来添加任何字段,不需要在你的类中添加任何额外的字段。映射照顾这一点。 – Nas