将一个Json与另一个Json结合起来(JAVA)

将一个Json与另一个Json结合起来(JAVA)

问题描述:

因此,我已经成功使用一个Json来完成所有工作。现在我有另一个课程,我只想获得一个属性。我现在有一个moviedatabase类(它使用JSON并获取所有信息),现在我想添加一个来自Youtube API的预告片。所以基本上我需要将它添加到相同的JSON中,以便将来将它更容易地转换为HTML。唯一的问题是我不能得到它的工作。使用此方法时,出现语法错误JSON。将一个Json与另一个Json结合起来(JAVA)

编辑代码1.1:

的Youtube属性:

public class FilmAttribut { 
    private String title = ""; 
    private String release = ""; 
    private int vote = 0; 
    private String overview = ""; 
    private String poster = ""; 
    private String trailer = ""; 

    // getters + setters stripped  
} 

的Youtube类:

public class Youtube { 

    FilmAttribut movie = new FilmAttribut(); 
    public void search(String trailer, FilmAttribut in) { 

     HttpResponse<JsonNode> response; 
     try { 
      response = Unirest.get("https://www.googleapis.com/youtube/v3/search?key=[app key here]&part=snippet") 
        .queryString("q", trailer + " trailer") 
        .asJson(); 

      JsonNode json = response.getBody(); 
      JSONObject envelope = json.getObject(); 
      JSONArray items = envelope.getJSONArray("items"); 

      in.setTrailer("https://youtu.be/" + items.getJSONObject(0).getJSONObject("id").getString("videoId")); //Gives me error here 

     } 
     catch (JSONException e) { 

      e.printStackTrace(); 
     } catch (UnirestException e) { 
      e.printStackTrace(); 
     } 

     return null; 

    } 
} 

和主方法

public class WebService { 

    public static void main(String[] args) { 
     setPort(1337); 

     Gson gson = new Gson(); 
     Youtube yt = new Youtube(); 
     MovieDataBase mdb = new MovieDataBase(); 




get("/search/:movie", (req, res) -> { 
      String titel = req.params(":movie"); 
      FilmAttribut film = mdb.searchMovie(titel); 
      yt.search(titel, film); 
      String json = gson.toJson(film); 
      return json; 

     }); 

所以我认为问题是你不能有两个gson.toJson(film) + gson.toJson(trailer);因为它使两次JSON,其中一次是为电影(又名。电影),然后创建一个新的json与拖车,使语法错误。

所以我真正的问题是,是否有可能有另一个类,如我现在的YouTube。将信息发送到具有所有属性的属性类,然后在main方法中运行它,以便我可以在一个JSON中获取所有JSON。

如果我没有很好地理解你的要求,是的,你可以,但我会做这样的事情,而不是:

public void search(String trailer, FileAttribut in) { 
    // fetch the trailer from youtube (NB: you should use getters/setters, not public fields) 
    in.setTrailer("https://youtu.be/" + items.getJSONObject(0).getJSONObject("id").getString("videoId")); 
} 

和:

FilmAttribut film = mdb.searchMovie(titel); 
yt.search(titel, film); // pass "film" to "fill" its trailer 
return gson.toJson(film); 

OR

public String search(String trailer) { 
    // fetch the trailer from youtube 
    return "https://youtu.be/" + items.getJSONObject(0).getJSONObject("id").getString("videoId"); 
} 

和:

FilmAttribut film = mdb.searchMovie(titel); 
film.setTrailer(yt.search(titel)); 
return gson.toJson(film); 
+0

嗯!我试图做到这一点,但它给了我'in.trailer'上的错误,它要求我为它创建一个方法,我已经更新了我的代码,正如你所看到的。我按照你的说法做了,但问题出在我说的地方。 – WeInThis

+0

你的更新代码看起来不错,尝试重新编译(如果使用eclipse,清除项目) – 2015-10-20 15:56:45

+0

它倾斜后工作!哦,我的男人!非常感谢你!顺便说一句,有没有一种方法可以像'in.trailer =“https://youtu.be/”+ items.getJSONObject(0).getJSONObject(“id”)。getString(“videoId”);'this into主要方法?或者是更难做的事情? – WeInThis