java - 嵌套 JSON 的问题

标签 java json jakarta-ee nested gson

我们做了什么? 我们正在使用电影 API 进行考试,并且正在获取 JSON。我们尝试手动提取“内部”JSON 部分,我们的方法运行良好。我们正在正确获取所有数据。我们用 GSON 对其进行了转换。 但它是一个嵌套的 JSON。我们已经尝试了这里和其他来源的几种方法以及嵌套 JSON。我们只是想从中得到“结果”部分。我们的准则有什么问题吗? 这可能只是一个小错误,但我们无法弄清楚。

    public void test() {
        int status = 0;
        String inputLine = "";
        System.out.println("Test Methode");
        try {
            String name = " The Italien Job";

            URL url = new URL("https://api.themoviedb.org/3/search/movie?"
                    + "api_key=/Notforyou:D/language=en-US&"
                    + "query=Spirited%20Away&page=1&include_adult=false");
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("GET");

            status = con.getResponseCode();
            System.out.println("Status " + status);
            BufferedReader in = new BufferedReader(
                    new InputStreamReader(con.getInputStream()));

            StringBuffer content = new StringBuffer();
            while ((inputLine = in.readLine()) != null) {
                content.append(inputLine);
                System.out.println("Ausgabe 1 " + inputLine);
                if (status == 200) {
                    System.out.println("Ausgabe 2 " + inputLine);
                    //Gson gson = new Gson();
                    //List<Film> filme = gson.fromJson(inputLine.toString(), List.class);


                    Type listType = new TypeToken<ArrayList<Film>>(){}.getType();
                    List<Film> yourClassList = new Gson().fromJson(inputLine, listType);

                    System.out.println("Anzahl Filme " + yourClassList.size());
                } else {
                    System.out.println("Fehler in dem Request");
                }
            }
            in.close();
            con.disconnect();

        } catch (MalformedURLException ex) {
            Logger.getLogger(theMovieDB.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(theMovieDB.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

}

编辑:Json.我们想要内部部分。在“结果”之后。请忽略引号。我只是快速输入。

{
„page“ : 1,
„total_results“:1,
„total_pages“:1,
„results“:[
    {
    „vote_count“:5511,
    „id“:129,
    „video“: false,
    „vote_average“:8.5,
    „title“:"Spirited Away",
    „popularity“: 24.739224,
    „original_language“:“ja“,
    „release_date“: „2001-07-20“
    }
    ]
}

希望有人能帮忙。 谢谢^^

最佳答案

您需要首先从包含所有电影的 JSON 响应中获取结果 JSONArray,并进一步需要将其转换为电影列表。

可以使用下面的代码来实现:

JsonObject jsonObject = (new JsonParser())
            .parse(content.toString().trim()).getAsJsonObject();
JsonArray films = ((JsonArray) jsonObject.get("results"));
Type listType = new TypeToken<ArrayList<Film>>(){}.getType(); 
List<Film> yourClassList = new Gson().fromJson(films, listType);

关于java - 嵌套 JSON 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51096282/

相关文章:

javascript - Ajax 添加选项以选择每个 json 数组

java - 从 session 中检索用户名时的策略

java - JPA:检查实体对象是否已持久化

java - 如果符合特定条件,如何删除已绘制的对象

java - 如何使用 HttpURLConnection 发送 HttpRequest?

java - 如何在 t :selectOneListbox? 中添加水平滚动条

java - Neo4j Wildfly OGM 。在本地单元测试中工作正常,但在部署后因资源异常而失败

java - System.gc问题

java - 在 JSONObject 中填充引号

jquery - 为什么我来自 Django 的 JSON 在大约 2.1MB 时被截断?