Синтаксический анализ JSON из API YouTube

#java #json #youtube-api

#java #json #youtube-api

Вопрос:

У меня есть URL: https://gdata .youtube.com/feeds/api/users/charlieissocoollike/uploads?alt=jsoncamp;v=2 который предоставляет информацию в формате JSON о последних загрузках на YouTube от пользователя.

Я написал некоторый код для анализа этих данных JSON, но я не понимаю, как работает JSON и как его анализировать на Java.

 public void getVideoData() throws ClientProtocolException, JSONException, IOException {

    JSONObject object = (JSONObject) new JSONTokener(getVideoJSON().toString()).nextValue();
    //String query = object.getString("data");
    JSONArray locations = object.getJSONArray("data");
    output.setText(locations.getString(1));

}

public JSONObject getVideoJSON () throws ClientProtocolException, IOException, JSONException {
    final String URL = "https://gdata.youtube.com/feeds/api/users/charlieissocoollike/uploads?alt=jsoncamp;v=2";

    StringBuilder url = new StringBuilder(URL);
    HttpGet get = new HttpGet(url.toString());      
    HttpResponse r = client.execute(get);       
    int status = r.getStatusLine().getStatusCode();
        HttpEntity e = r.getEntity();           
        String data = EntityUtils.toString(e);          
        JSONArray VideoData = new JSONArray(data);      
        JSONObject video = VideoData.getJSONObject(0);  

        return video;           
}
  

Как я должен извлекать идентификатор видео, заголовок и описание из данных JSON каждого видеообъекта?

Ответ №1:

В http://www.json.org / имеет синтаксический анализатор, реализованный на JAVA.

Комментарии:

1. Вы прочитали вопрос и код? OP уже использует его. Он только не знает, как именно извлечь свойства, используя этот анализатор JSON. Кроме того, «Java» не является аббревиатурой, поэтому, пожалуйста, не выкрикивайте это 🙂

Ответ №2:

Вы почти на месте. Что вам нужно, так это:

 JSONObject json = new JSONObject(data);
JSONObject dataObject = json.getJSONObject("data"); // this is the "data": { } part
JSONArray items = dataObject.getJSONArray("items"); // this is the "items: [ ] part
  

Затем вы можете просматривать каждое видео:

 for (int i = 0; i < items.length(); i  ) {
    JSONObject videoObject = items.getJSONObject(i); 
    String title = videoObject.getString("title");
    String videoId = videoObject.getString("id");
}
  

Комментарии:

1. Спасибо за ответ, но могу ли я вставить этот код в метод getVideoJSON, сделать его недействительным и удалить метод getVideoData ?

2. Это зависит от того, что вы хотите с этим сделать. Я не знаю, что вы пытаетесь сделать с данными, но этот код должен дать вам общее представление о том, как получить заголовок и идентификатор каждого видео (и многое другое) из всех результатов видео.

Ответ №3:

Вам было бы лучше использовать официальную клиентскую библиотеку: http://code.google.com/apis/youtube/2.0/developers_guide_java.html#Retrieving_user_activity_feeds

Комментарии:

1. Я пытался использовать клиентские библиотеки, но постоянно получаю ошибку проверки в com.google.gdata.client.media. Медиасервисы ? И понятия не имею, что не так?