2015-10-20 2 views
3

Итак, я уже успел с одним 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. отправить информацию в класс атрибута, где у меня есть все мои атрибуты, а затем запустить его в основном методе, чтобы я мог получить все JSON в одном JSON.

ответ

1

Если бы я хорошо понять, что вы спрашиваете, да вы можете, но я хотел бы сделать что-то подобное вместо:

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); 

ИЛИ

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) –

+0

Он работал после наклонения! Ой, мой человек! Большое спасибо! Btw, есть способ сделать как 'in.trailer =" https://youtu.be/ "+ items.getJSONObject (0) .getJSONObject (" id "). GetString (" videoId ");' this в главный метод? Или это сложнее? – WeInThis

Смежные вопросы