为属性为List和String

时间:2018-11-09 22:43:29

标签: java android json gson

提前感谢那些可以看到我的出版物的人。我正在使用服务,并且具有以下JSON

"custom_attributes": [                  
        {
            "attribute_code": "meta_description",
            "value": "Calzado"
        },
        {
            "attribute_code": "category_ids",
            "value": [
                "2",
                "151",
                "161",
                "163"
            ]
        }
    ]

如果我将Value属性放在列表中,我尝试的操作将出现以下错误。

  

java.lang.IllegalStateException:应为BEGIN_ARRAY,但在第1行第8375列的路径$ .custom_attributes [0] .value

模型

public class CustomAttribute {

@SerializedName("attribute_code")
private String attributeCode;
@SerializedName("value")
private List<String> value = null;

public String getAttributeCode() {
return attributeCode;
}

public void setAttributeCode(String attributeCode) {
this.attributeCode = attributeCode;
}

public List<String> getValue() {
return value;
}

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

}

2 个答案:

答案 0 :(得分:1)

"custom_attributes"本身是一个包含对象的数组

我认为您在某个地方有List<CustomAttibute>

,并且该数组中没有一致的对象格式。 value既是字符串,又是List<String>

最好的方法是private Object value = null;,然后必须检查其类型并在以后的运行时对其进行转换,否则您将无法使用带有Gson转换器的Retrofit,因为Gson希望列表中形成的对象类型一致(意味着对于每个JSON键,只有一个值类型)。

答案 1 :(得分:0)

您得到的错误意味着您正在告诉模型期望一个数组,该数组应该在其中获取字符串。

为了轻松解决问题,您可以使用this在线资源来生成模型(只需复制粘贴json文件即可)

或者您可以使用this插件直接从android studio生成模型!

希望您得到了答案!