【问题标题】:Deserialize a complex JSON Object into a POJO using GSON使用 GSON 将复杂的 JSON 对象反序列化为 POJO
【发布时间】:2017-05-13 20:41:24
【问题描述】:

我从 IMDB 收到以下 JSON 响应。

{
 "Search":
    [
      {
       "Title":"Seven Pounds",
       "Year":"2008",
       "imdbID":"tt0814314",
       "Type":"movie",
       "Poster":"someUrl"
      },
     {
       "Title":"Seven Samurai",
       "Year":"1954",
       "imdbID":"tt0047478",
       "Type":"movie",
       "Poster":"someUrl"
     }
    ],
    "totalResults":"1048",
    "Response":"True"
}

我想提取每部电影并将其存储到一个列表中,因此我创建了一个带有电影列表的类 MovieContainer,其中每个电影包含描述有关该电影的详细信息的字符串属性,例如标题,yiddi yadda - 你懂的!

我用下面的代码sn-p来;

MovieContainer cnt = new Gson().fromJson(jstring, MovieContainer.class);

其中 jstring 是一个有效的 json 字符串,类似于上面的 json 字符串示例,但是当我尝试遍历 MovieContainer 实例中的 List 时,我得到了 NullPointerException。

我是 GSON 新手,因此不确定是什么原因?

编辑:我确实知道 NullPointerException 是什么,但我不明白为什么 Java 在我的示例中抛出它。

我的 MovieContainer 类:

public class MovieContainer {
    public List<Movie> movies;
}

我的电影课:

public class Movie {
    String Title;
    String Year;
    String Poster;
    String imdbID;
    String Type;
}

我希望调用 fromJson 方法以使用与字段名称匹配的信息填充我的列表,但列表电影点为空。

【问题讨论】:

标签: java json gson


【解决方案1】:

您的 MovieContainer 类缺少其他两个字段,即 totalResults 和 Response,它们也是根 json 对象的一部分。

这是一个快速的肮脏示例,可以帮助您启动并运行。它基于您迄今为止提供的信息。

电影.java

public class Movie {
    private String Title;
    private String Year;
    private String imdbID;
    private String Type;
    private String Poster;
}

MovieContainer.java

public class MovieContainer {
    private List<Movie> Search;
    private String totalResults;
    private String Response;

    public static void main(String[] args) {
        // Converts the json to the Java object a.k.a POJO ?!!!
        deserialize();
    }

    private static void deserialize() {
        String jstring = " { " +
                "  'Search' : [ " +
                "    { " +
                "      'Title' : 'Seven Pounds', " +
                "      'Year' : '2008', " +
                "      'imdbID' : 'tt0814314', " +
                "      'Type' : 'movie', " +
                "      'Poster' : 'someUrl' " +
                "    }, " +
                "    { " +
                "      'Title' : 'Seven Samurai', " +
                "      'Year' : '1954', " +
                "      'imdbID' : 'tt0047478', " +
                "      'Type' : 'movie', " +
                "      'Poster' : 'someUrl' " +
                "    } " +
                "  ], " +
                "  'totalResults' : '1048', " +
                "  'Response' : 'True' " +
                " } ";

         Gson gson = new Gson();

         MovieContainer searchResults = gson.fromJson(jstring, MovieContainer.class);
     }
 }

确认列表不为空的截图如下:-

现在是时候聚会见啦!!! ?????

【讨论】:

    【解决方案2】:

    如果您想首先搜索标题,则需要在该数据中进行“搜索”,您需要迭代并查找标题。

    因为您的 Gson 包含 3 个元素,“Search”、“totalResults”和“Response”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-28
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      相关资源
      最近更新 更多