将一个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);
嗯!我试图做到这一点,但它给了我'in.trailer'上的错误,它要求我为它创建一个方法,我已经更新了我的代码,正如你所看到的。我按照你的说法做了,但问题出在我说的地方。 – WeInThis
你的更新代码看起来不错,尝试重新编译(如果使用eclipse,清除项目) – 2015-10-20 15:56:45
它倾斜后工作!哦,我的男人!非常感谢你!顺便说一句,有没有一种方法可以像'in.trailer =“https://youtu.be/”+ items.getJSONObject(0).getJSONObject(“id”)。getString(“videoId”);'this into主要方法?或者是更难做的事情? – WeInThis