用Gson解析复杂的Json对象

时间:2016-12-29 13:53:03

标签: java json gson

我有一个来自OMDb的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"
}

我想提取每部电影并将其存储到List中,因此我创建了一个带有电影列表的MovieContainer类,其中包含一组字符串。

我用过

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

其中jstring是一个带有json的String,如上所述,但是当我尝试迭代Container中的List时,我得到一个NullPointerException。

由于我是Gson的初学者,我找不到原因,我该如何解析Json?

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

我的MovieContainer课程:

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

我的电影课程:

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

我认为fromJson方法应该使用与字段名称匹配的信息填充我的List,但List电影指向null。

2 个答案:

答案 0 :(得分:0)

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

因为您的Gson包含3个元素,“搜索”,“totalResults”和“响应”。

答案 1 :(得分:0)

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

这是一个让您起步并运行的快速示例。它基于您到目前为止提供的信息。

Movie.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);
     }
 }

用于确认列表不为空的屏幕截图如下:-

IMDB Search Results JSON to Java using GSON

现在可以参加聚会了!!! ?????