使用Java从OMDB(IMDB)API解码Java JSON

时间:2014-05-30 18:30:04

标签: java api imdb json-simple

我想从OMDB API获取电影数据,这是JSON文本。我使用Java来解码这个和JSON-simple包。

我要解码的网址例如:http://www.omdbapi.com/?t=icarus

结果(直接复制和粘贴,不是结构化):

  

{"名称":"伊卡洛斯""年份":" 2010""额定":& #34; TV-14","发布":" 2010年12月10日","运行时":" 42分钟",& #34;类型":"冒险,戏剧,浪漫","导演":" Mairzee Almas","作家":& #34; Alfred Gough(创作者),Jerry Siegel(角色创作者:超人),Miles Millar(创作者),Joe Shuster(角色创作者:超人),Alfred Gough(为电视开发),Miles Millar(为电视开发) by),Genevieve Sparling",#34; Actors":" Tom Welling,Erica Durance,Cassidy Freeman,Justin Hartley"," Plot":"随着VRA威胁的加剧,Clark主动关闭了了望塔并宣布联盟正式进入地下,但这足以阻止小跑步和斯莱德威尔逊...","语言":& #34;英语""国家":"美国""与获奖#34;:" N / A""海报":" http://ia.media-imdb.com/images/M/MV5BMjIwNDQ2MjM5OV5BMl5BanBnXkFtZTcwODU4NzU0NA@@._V1_SX300.jpg"" Metascore&#3 4;:" N / A"" imdbRating":" 8.6"" imdbVotes":" 367" " imdbID":" tt1628582""类型":"插曲""响应":"真"}

我的按钮下的代码:

        String url = "http://www.omdbapi.com/?t=" + jListFilms.getSelectedValue().toString();

    try {
        JSONParser parser = new JSONParser();
        Object obj = parser.parse(url);
        JSONObject jsonObj = (JSONObject) obj;

        String title = (String) jsonObj.get("Title") ;
        System.out.println(title);

    } catch (ParseException e){
        System.out.println(e);
    }

当我打印出变量 title

  

位置0处的意外字符(h)。

有谁知道为什么我不能获得电影的标题?

2 个答案:

答案 0 :(得分:1)

你的代码正在做的是解析字符串URL,它开始" http://",因此h位于0。

您需要在该URL发出HTTP GET请求才能获得JSON。

Here's an answer for how to issue the GET request

答案 1 :(得分:1)

感谢Adam带领我走向正确的方向。我现在使用的是InputStream和Google Gson而不是JSON.Simple。

现在这是我的代码,它的工作原理我希望它可以工作。

        try {

        String selectedItem = jListFilms.getSelectedValue().toString().replace("\\s+", "+");

        InputStream input = new URL("http://www.omdbapi.com/?t=" + URLEncoder.encode(selectedItem, "UTF-8")).openStream();
        Map<String, String> map = new Gson().fromJson(new InputStreamReader(input, "UTF-8"), new TypeToken<Map<String, String>>(){}.getType());

        String title = map.get("Title");
        String year = map.get("Year");
        String released = map.get("Released");
        String runtime = map.get("Runtime");
        String genre = map.get("Genre");
        String actors = map.get("Actors");
        String plot = map.get("Plot");
        String imdbRating = map.get("imdbRating");
        String poster = map.get("Poster");

        testForm tf = new testForm(title, year, released, runtime, genre, actors, plot, imdbRating);
        tf.setVisible(true);

    } catch (JsonIOException | JsonSyntaxException | IOException e){
        System.out.println(e);
    }