Java:将JSON响应(逐行)添加到JTable

时间:2019-02-20 10:24:39

标签: java swing api jtable

我正在为学校制作一个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);

现在我有点卡住了。我从这里去哪里?

1 个答案:

答案 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,所有问题都已解决。干净柔软。