【问题标题】:Android Json parsing with GSON?用 GSON 解析 Android Json?
【发布时间】:2016-12-06 06:10:49
【问题描述】:

我对使用 Gson 解析 Json 非常熟悉。我已经使用 Gson 完成了 Json 解析,但最近我有多个带有响应的 json 对象,我在解析上有点卡住了,这是我的代码,谁能帮我解决我的问题,我做错了什么。

提前致谢

这是我的 json 响应:- Json response

这是我的 POGO 解析类:-

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

用户属性实体.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;
}
}

Style Profile.java

我这里就是这样用的

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

【问题讨论】:

    标签: android json gson android-volley


    【解决方案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;
    }
    

    //用户属性

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

    //用户属性

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

    //样式属性

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

    自己输入你的 get,set 方法。

    【讨论】:

    • 我有点迷惑你能解释一下吗??
    • 这里使用映射类型,它会自动映射所有密钥对值。如果您以后想添加任何字段,则无需在您的班级中添加任何额外的字段。映射会解决这个问题。
    • ..它对我有一点帮助..但是你给了你时间帮助我..:) 所以谢谢..
    • 您需要什么?用您的问题而不是新问题更新您的最后一条评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    相关资源
    最近更新 更多