我有一个看起来像这样的JSON对象
{
id:int,
tags: [
"string",
"string"
],
images: {
waveform_l:"url_to_image",
waveform_m:"url_to_image",
spectral_m:"url_to_image",
spectral_l:"url_to_image"
}
}
我尝试使用改造来解析JSON并创建界面。我遇到的问题是我的图片网址为空。其他所有工作,我能够检索id,标签,但是当我尝试获取图像时,它们都是空的。
我有一个看起来像这样的声音:
public class Sound {
private Integer id;
private List<String> tags = new ArrayList<String>();
private Images images;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Images getImages() {
return images;
}
public void setImages(Images images) {
this.images = images;
}
... setters and getter for tags as well
}
我有一个像这样的图像pojo:
public class Images {
private String waveformL;
private String waveformM;
private String spectralM;
private String spectralL;
public String getWaveformL() {
return waveformL;
}
public void setWaveformL(String waveformL) {
this.waveformL = waveformL;
}
public String getWaveformM() {
return waveformM;
}
public void setWaveformM(String waveformM) {
this.waveformM = waveformM;
}
public String getSpectralM() {
return spectralM;
}
public void setSpectralM(String spectralM) {
this.spectralM = spectralM;
}
public String getSpectralL() {
return spectralL;
}
public void setSpectralL(String spectralL) {
this.spectralL = spectralL;
}
}
每当我尝试调用images.getWaveformM()时,它都会给我一个空指针。有什么想法吗?
答案 0 :(得分:6)
你可能需要这个部分:
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create();
setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
将允许gson自动将蛇案例转换为驼峰案例。
答案 1 :(得分:6)
@SerializedName
也可用于解决此问题。它允许您匹配预期的JSON格式,而不必以完全相同的方式声明您的类变量。
public class Images {
@SerializedName("waveform_l")
private String waveformL;
@SerializedName("waveform_m")
private String waveformM;
@SerializedName("spectral_m")
private String spectralM;
@SerializedName("spectral_l")
private String spectralL;
...
}
如果从JSON到你的类变量的唯一区别是蛇/骆驼案例,那么@ njzk2答案可能会更好,但如果在这些界限之外有更多差异,那么@SerializeName
可能是你的朋友。
答案 2 :(得分:0)
public class Images {
private String waveform_l;
private String waveform_m;
private String spectral_m;
private String spectral_m;
}
键名在模型中应与json中的相同,否则它不会识别它,否则你无法在GsonBuilder创建时定义它。生成相同的getter setter并且你会很高兴去