【发布时间】:2017-11-05 16:24:34
【问题描述】:
我目前正在尝试使用 GSON 从下面显示的 last.fm API 中提取名称“Best I Ever Had”,但在不断返回空值时遇到了困难。
******************************编辑****************** *************
这是 JSON,曲目是字典列表,每个歌曲名称对应一个:
{
toptracks: {
track: [
{
name: "Best I Ever Had"
}
]
}
}
使用http://www.jsonschema2pojo.org/ 我创建了以下类:
TrackName.java
package com.webservice1;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class TrackName {
@SerializedName("toptracks")
@Expose
private Toptracks toptracks;
public Toptracks getToptracks() {
return toptracks;
}
public void setToptracks(Toptracks toptracks) {
this.toptracks = toptracks;
}
public TrackName withToptracks(Toptracks toptracks) {
this.toptracks = toptracks;
return this;
}
}
Toptracks.java
package com.webservice1;
import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Toptracks {
@SerializedName("track")
@Expose
private List<Track> track = null;
public List<Track> getTrack() {
return track;
}
public void setTrack(List<Track> track) {
this.track = track;
}
public Toptracks withTrack(List<Track> track) {
this.track = track;
return this;
}
}
最后是 Track.java
package com.webservice1;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Track {
@SerializedName("name")
@Expose
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Track withName(String name) {
this.name = name;
return this;
}
}
这是我使用 fromJson 方法的代码,其中回复包含整个 JSON,并且一直是“跟踪名称 com.webservice1.Toptracks@1b9e1916”
String reply;
reply = reader.readLine();
Gson gson = new Gson();
TrackName response = gson.fromJson(reply, TrackName.class);
System.out.println("Track Name " + response.getToptracks());
任何帮助将不胜感激!
【问题讨论】:
-
好吧,PopularTrack 根本不匹配您的 JSON 对象的结构。 JSON 对象有一个名为 toptracks 的属性,它是一个具有名为 track 的属性的对象,它是一个具有 name 属性的对象数组。 PopularTrack 根本不匹配。它只有一个名字。所以它可以用来映射一个类似于
{ "name": "foo" }的JSON。 -
可以使用jsonschema2pojo.org生成propper对象结构
-
如何创建一个与我的 JSON 对象匹配的类?
-
JSON 有一个 toptracks 属性。所以你需要在你的顶级课程中使用它。它的值是 JSON 中的一个对象。所以你创建另一个类来建模这个对象。 toptracks JSON 对象有一个名为 track 的数组。因此,您将轨道属性添加到第二个类。该数组包含对象。所以你创建了第三个类来为这第三种 JSON 对象建模。
-
请查看使用jsonschema2pojo.org编辑的代码。我现在的问题是它没有输出“我曾经拥有过的最好的”。你知道我哪里出错了吗?