Ошибка синтаксического анализа JSON с использованием Bing Traffic API

Я пытаюсь получить некоторые данные о трафике с помощью Bing Traffic API, но продолжаю получать JSONException.

JSON находится ЗДЕСЬ. Я использовал средство форматирования JSON, здесь, чтобы лучше понять доступные мне данные. URL-адрес общедоступен, поэтому я не знаю, нужно ли мне предоставлять какие-то данные аутентификации или нет, потому что я могу просто подключить URL-адрес к своему браузеру и тут же просмотреть результат JSON.

Вот как я звоню

String url = "http://dev.virtualearth.net/REST/v1/Traffic/Incidents/37,-105,45,-94?key=" + API_KEY;

    // Create JSONParser instance
    JSONParser jParser = new JSONParser();

    // Get JSON from url
    final JSONObject jObject = jParser.getJSONFromUrl(url);


    try {
        JSONArray trafficData = jObject.getJSONObject(TAG_RESOURCESETS).getJSONArray(TAG_RESOURCES);
        Log.w("TrafficIncidentProvider", "Traffic Array consists of " + trafficData.toString());
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Я пытаюсь получить объект с именем «resourceSets» и объект с именем «ресурсы», так как кажется, что именно там внутри встроены нужные мне данные.. но, очевидно, я делаю это неправильно, потому что logCat говорит мне, что нет значения, которое соответствует этим данным. Вот ошибка logcat выдает мне

  12-10 17:12:42.924: E/JSON Parser(26560): Error parsing data  org.json.JSONException:   End of input at character 0 of 
  12-10 17:12:42.944: W/System.err(26560): org.json.JSONException: No value for  resourceSets
  12-10 17:12:43.004: W/System.err(26560):  at org.json.JSONObject.get(JSONObject.java:354)
  12-10 17:12:43.004: W/System.err(26560):  at org.json.JSONObject.getJSONObject(JSONObject.java:569)
  12-10 17:12:43.014: W/System.err(26560):  at com.brightr.weathermate.providers.TrafficIncidentProvider.getTrafficIncidents(TrafficIncidentProvider.java:43)
  12-10 17:12:43.014: W/System.err(26560):  at com.brightr.weathermate.activities.LocationMapview$showTrafficConditions.doInBackground(LocationMapview.java:323)
  12-10 17:12:43.024: W/System.err(26560):  at com.brightr.weathermate.activities.LocationMapview$showTrafficConditions.doInBackground(LocationMapview.java:1)
  12-10 17:12:43.034: W/System.err(26560):  at android.os.AsyncTask$2.call(AsyncTask.java:185)
  12-10 17:12:43.034: W/System.err(26560):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
  12-10 17:12:43.044: W/System.err(26560):  at java.util.concurrent.FutureTask.run(FutureTask.java:138)
  12-10 17:12:43.044: W/System.err(26560):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
  12-10 17:12:43.044: W/System.err(26560):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)

Любая ясность по этому вопросу будет принята с благодарностью, ребята. Как всегда спасибо!

РЕДАКТИРОВАТЬ: В соответствии с запросом, вот мой код JSONParser, который содержит мой метод HttpPost

 public JSONObject getJSONFromUrl(String url) {

    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);


        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();          

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    // try parsing the string to a JSON object
    try {
        if(json != null){
        jObj = new JSONObject(json);
        }else{
            jObj = null;
        }
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;

}

person Jade Byfield    schedule 10.12.2012    source источник


Ответы (1)


Разберите этот json как:

         try {
                JSONObject jobject=new JSONObject("Your_json_String");
                JSONArray jarray=jobject.getJSONArray("resourceSets");
                  System.out.println("dateNow jarray :"+jarray.length());
                  for(int i=0;i<jarray.length();i++){
                      if(!jarray.isNull(i)){
                      JSONObject jobjresources=jarray.getJSONObject(i);
                      System.out.println("dateNow jobjresources :"+jobjresources.length());
                      //estimatedTotal
                      if(!jobjresources.isNull("estimatedTotal")){
                        String str_estimatedTotal=jobjresources.getString("estimatedTotal");
                        System.out.println("resources str_estimatedTotal :"+str_estimatedTotal);

                      }
                      else{
                          System.out.println("resources str_estimatedTotal NULL for :"+i+" ITEM");
                      }
                        if(!jobjresources.isNull("resources")){
                        //resources
                        JSONArray jarrresources=jobjresources.getJSONArray("resources");
                        for(int j=0;j<jarrresources.length();j++){
                            System.out.println("$$$$$$$$$$ ITEM "+j+" START $$$$$$$$$$$$$$$$#");
                            if(!jarrresources.isNull(j)){

                            JSONObject jobjjarrresources=jarrresources.getJSONObject(j);
                            if(!jobjjarrresources.isNull("__type")){
                              //__type"
                            String str_type=jobjjarrresources.getString("__type");
                            System.out.println("resources str_type :"+str_type);
                            }
                            else{
                                System.out.println("resources __type NULL for :"+j+" ITEM");
                            }
                              //description"
                            if(!jobjjarrresources.isNull("description")){
                            String strdescription=jobjjarrresources.getString("description");
                            System.out.println("resources description :"+strdescription);
                            }
                            else{
                                System.out.println("resources description NULL for :"+j+" ITEM");
                            }
                              //lane"
                            if(!jobjjarrresources.isNull("lane")){
                            String strlane=jobjjarrresources.getString("lane");
                            System.out.println("resources lane :"+strlane);
                            }
                            else{
                                System.out.println("resources lane NULL for :"+j+" ITEM");
                            }
                              //lane"
                            if(!jobjjarrresources.isNull("point")){
                                JSONObject jobjpoint=jobjjarrresources.getJSONObject("point");
                                //point
                                if(!jobjpoint.isNull("coordinates")){
                                JSONArray jarcoordinates=jobjpoint.getJSONArray("coordinates");
                                for(int k=0;k<jarcoordinates.length();k++){
                                    //JSONObject jobjcoordinates=jarcoordinates.getString(k);
                                     if(!jarcoordinates.isNull(k)){
                                    String str_zero=jarcoordinates.getString(k);
                                    System.out.println("coordinates :"+k+": "+str_zero);
                                     }
                                     else{
                                         System.out.println("coordinates :"+k+" is NULL:"+j+" ITEM");
                                     }
                                 }
                                }
                                else{
                                    System.out.println("resources coordinates NULL for :"+j+" ITEM");
                                }
                            }
                            else{
                                System.out.println("resources point NULL for :"+j+" ITEM");
                            }

                              //roadClosed"
                              //lane"
                            if(!jobjjarrresources.isNull("roadClosed")){

                            String strroadClosed=jobjjarrresources.getString("roadClosed");
                            System.out.println("resources roadClosed :"+strroadClosed);
                            }
                            else{
                                System.out.println("resources roadClosed NULL for :"+j+" ITEM");
                            }
                              //severity"
                            if(!jobjjarrresources.isNull("severity")){
                            String strroadseverity=jobjjarrresources.getString("severity");
                            System.out.println("resources severity :"+strroadseverity);
                            }
                            else
                            {
                                System.out.println("resources severity NULL for :"+j+" ITEM");
                            }
                        }
                            else{
                                System.out.println("jarrresources    NULL for :"+j+" ITEM");
                            }

                            System.out.println("##################### ITEM "+j+" END ##############");
                        }
                       }
                        else{
                            System.out.println("resources    NULL for :"+i+" ITEM");
                        }
                  }

                   else{
                       System.out.println("resources     NULL for : ITEM");
                      }  
          }


            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

}

person ρяσѕρєя K    schedule 10.12.2012
comment
Эй, большое спасибо за ваш подробный ответ человек! Но, к сожалению, я все еще получаю сообщение об ошибке, что для resourceSets не найдено найденное значение. Я действительно этого не понимаю, потому что в этом json явно есть массив с таким именем. Есть идеи, почему это так? - person Jade Byfield; 11.12.2012
comment
12-10 17:57:05.093: E/JSON Parser(28540): ошибка анализа данных org.json.JSONException: конец ввода на символе 0 из 12-10 17:57:05.113: W/System.err(28540) : org.json.JSONException: нет значения для resourceSets 12–10 17:57:05.163: W/System.err(28540): at org.json.JSONObject.get(JSONObject.java:354) 12–10 17:57 :05.173: W/System.err(28540): в org.json.JSONObject.getJSONArray(JSONObject.java:544) - person Jade Byfield; 11.12.2012
comment
к какому значению вы хотите получить доступ из этого json? - person ρяσѕρєя K; 11.12.2012
comment
Я хочу получить доступ к члену _type, а также к описанию, координатам и другим элементам, которые находятся в массиве с именами ресурсов. Ваш код кажется мне правильным, и я не понимаю, почему я получаю сообщение об ошибке, что resourceSets не имеет значения. Мое единственное, что URL-адрес возвращает нуль или что-то в этом роде, но я не знаю, почему. Может быть, из-за каких-то проблем с аутентификацией? Эти вещи сводят меня с ума, лол - person Jade Byfield; 11.12.2012
comment
Можете ли вы также опубликовать метод httppost, тогда я попробую и найду текущую проблему? - person ρяσѕρєя K; 11.12.2012
comment
Это ссылка, по которой я пытаюсь получить данные из dev.virtualearth.net/REST/v1/Traffic/Incidents/ - person Jade Byfield; 11.12.2012
comment
но срок действия этой ссылки на моей стороне истек, поэтому пришлите мне последнюю - person ρяσѕρєя K; 11.12.2012
comment
Хм.. странно. Можете ли вы вставить ссылку на эту страницу и посмотреть, отобразится ли результат? jsonformat.com/#jsondataurllabel - person Jade Byfield; 11.12.2012
comment
давайте продолжим это обсуждение в чате - person Jade Byfield; 11.12.2012
comment
Извини, брат, я еще не пробовал, попробую через несколько часов, когда вернусь домой, и дам тебе знать :). Большое спасибо!! - person Jade Byfield; 11.12.2012
comment
Эй, парень, быстрый вопрос. Что именно должна делать эта строка? - person Jade Byfield; 11.12.2012
comment
присоединяйтесь ко мне chat.stackoverflow.com/rooms/20900/ - person ρяσѕρєя K; 11.12.2012