我正在为学校制作一个Java应用程序,我想在其中从JSON格式的API中获取数据。更准确地说,我获取对象列表。每个对象都包含有关一件事的数据,比方说电影数据。
返回的数据如下:{"page":1,"total_results":102,"total_pages":6,"results":[{"vote_count":13240,"id":597,"video":false,"vote_average":7.8,"title":"Titanic"}]}
。
现在,对于“结果”中的每一行电影,我想在JTable
中显示名称。现在,代码如下:
String text = searchField.getText();
String url = "https://api.themoviedb.org/3/search/movie?api_key=SECRET&query=" + URLEncoder.encode(text, "UTF-8");
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer buffer = new StringBuffer();
while((inputLine = in.readLine()) != null)
{
buffer.append(inputLine);
}
in.close();
DefaultTableModel table = new DefaultTableModel();
table.addColumn("Title");
jTable.setModel(table);
现在我有点卡住了。我从这里去哪里?
答案 0 :(得分:1)
最好的方法是遵循MVC design pattern并创建一个类,以便将这些JSON行表示为对象。然后使用现有的库将值解析为对象。我认为最常见的库是GSON.
在那之后,您将拥有带有属性的Object,而不是一些JSON行。我们来看一个例子:
假设您获得的(Persons)JSON行如下:
{"name":John, "age":34}
现在,您无需创建此类字符串,而是创建一个Person类:
public class Person {
private String name;
private int age;
public Person() {
// JSON parsers need a declared default (no argument) constructor
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
然后简单:
Gson gson = new GsonBuilder().create();
Person p = gson.fromJson(myJsonString, Person.class);
您有一个拥有此JSON字符串值的人。
最后:您阅读了this question,所有问题都已解决。干净柔软。