使用 GSON 將 JSON 反序列化為 Java 對象時遇到問題

馬特演示

我一直在努力學習 GSON,但我正在努力學習。我正在嘗試使用 GSON 將 JSON 文件反序列化為 Java 對象。我已經在這裡閱讀了一百萬個其他問題,對於我的一生,我無法理解我做錯了什麼。

這是我的 JSON 文本:

{
 "movies": [
  {
   "name": "The Shawshank Redemption",
   "url": "https://parsehub.com/sandbox/moviedetails?movie=The%20Shawshank%20Redemption",
   "IMAX": "06:00 PM",
   "rating": "9 . 2",
   "cast": [
    {
     "character": "Andy Dufresne",
     "actor": "Tim Robbins"
    },
    {
     "character": "Ellis Boyd 'Red' Redding",
     "actor": "Morgan Freeman"
    },
    {
     "character": "Warden Norton",
     "actor": "Bob Gunton"
    },
    {
     "character": "Heywood",
     "actor": "William Sadler"
    }
   ]
  },
  {
   "name": "Schindler's List",
   "url": "https://parsehub.com/sandbox/moviedetails?movie=Schindler%27s%20List",
   "IMAX": "06:15 PM",
   "rating": "8 . 9",
   "cast": [
    {
     "character": "Oskar Schindler",
     "actor": "Liam Neeson"
    },
    {
     "character": "Itzhak Stern",
     "actor": "Ben Kingsley"
    },
    {
     "character": "Amon Goeth",
     "actor": "Ralph Fiennes"
    }
   ]
  }
 ]
}

這是我的 Java 代碼:

import com.google.gson.Gson;
import java.io.*;
import java.lang.reflect.Type;
import java.util.ArrayList;

public class Main {

    public static void main(String[] args) throws FileNotFoundException {
        Gson gson = new Gson();
        Movies[] movies = gson.fromJson(new FileReader("src/main/input.json"), (Type) Movies.class);
        System.out.println(movies[0]);
    }

    class Movies {
        String name;
        String url;
        String IMAX;
        String rating;
        ArrayList<Cast> cast;
    }

    class Cast {
        ArrayList<CastMember> castMembers;
    }

    class CastMember{
        String character;
        String actor;
    }
}

當我運行它時,我收到以下錯誤:

Exception in thread "main" java.lang.ClassCastException: class com.Main$Movies cannot be cast to class [Lcom.Main$Movies; (com.Main$Movies and [Lcom.Main$Movies; are in unnamed module of loader 'app')
    at com.Main.main(Main.java:13)
暗記憶

您正在反序列化的 JSON 表示一個帶有對象列表的對象。您嘗試反序列化的 Java 對象需要與之匹配。

首先,創建一個新類MovieList

class MovieList {
     List<Movie> movies;
}

將您的Movies更新為 call Movie,因為它代表一部電影。

class Movie {
     String name;
     String url;
     String IMAX;
     String rating;
     List<Cast> cast;
}

現在嘗試gson.fromJson(...)使用以下命令調用

MovieList movieList = gson.fromJson(new FileReader("src/main/input.json"), MovieList.class);
System.out.println(movieList.getMovies().get(0));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用GSON或Java中的另一个JSON库反序列化列表?

使用gson反序列化对象的特定JSON字段

使用gson反序列化json数组

JSON-使用Gson反序列化动态对象

使用google-gson进行JSON序列化/反序列化通用类型

使用Gson的泛型Java反序列化

如何使用GSON反序列化嵌套的JSON数组?

使用Gson在Java中反序列化任意JSON并尊重整数

如何使用GSON序列化/反序列化部分JSON对象?

使用gson反序列化json数组?

Kotlin使用Gson反序列化本地json文件

使用Gson从Json反序列化Map

使用Gson反序列化JSON

使用Gson反序列化json不起作用

不推荐使用GSON。我们可以使用哪一个来对Java对象与JSON进行序列化和反序列化?

使用 GSON 反序列化 JSON 对象数组

使用 gson 和改造反序列化 json

在 kotlin 中使用 Gson 进行 Json 反序列化

將 JSON 字符串反序列化為多個 C# 對象

使用 gson 反序列化反序列化對象的內部對象

在 NewtonSoft Json 中將通用布爾值反序列化為對象時出錯?

如何將 json 反序列化為結構?

C# - 將 JSON 反序列化為對象,然後運行 foreach 循環添加到列表視圖中

將 JSON 反序列化為對象,然後運行 foreach 循環添加到列表視圖中

反序列化的 Json 對象值為 null

嘗試在 Powershell 中將 JSON 反序列化為類型化對象

將反序列化的 json 存儲在 Flutter 對象列表中

使用字典 System.Text.Json 將 json 反序列化為對象

如何使用 System.Text.Json 將 json 字符串或流反序列化為 Dictionary<string,string>