0

I'm trying to get some traffic data using the Bing Traffic API, but I keep getting a JSONException.

The JSON is located HERE. I used a JSON formatter located here in order to better get an idea of the data that's available to me. The url is publicly facing so I don't know if I need to provide some sort of authentication data or not, because I can just plug the url into my browser and view the JSON result right there.

Here's how I'm making the call

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

I'm trying to get the object named "resourceSets" and the object named "resources", since it seems that that's where the data I need is embedded inside.. but obviously I'm going about it the wrong way because logCat is telling me that there's no value that matches that data. Here's the error logcat is giving me

  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)

Any clarity on this issue would be greatly appreciated, guys. Thanks as always!

EDIT: As requested, here is my JSONParser code which contains my HttpPost method

 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;

}
Jade Byfield
  • 4,668
  • 5
  • 30
  • 41

1 Answers1

1

Parse this json as:

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

}

ρяσѕρєя K
  • 132,198
  • 53
  • 198
  • 213
  • Hey, thanks so much for you thorough response man! But unfortunately I'm still getting the error that there's no found value found for "resourceSets"..I don't really understand this because there is clearly an array with such name in that json. Any ideas why this is? – Jade Byfield Dec 10 '12 at 22:59
  • 12-10 17:57:05.093: E/JSON Parser(28540): Error parsing data org.json.JSONException: End of input at character 0 of 12-10 17:57:05.113: W/System.err(28540): org.json.JSONException: No value for 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): at org.json.JSONObject.getJSONArray(JSONObject.java:544) – Jade Byfield Dec 10 '12 at 23:04
  • which value you want to access from this json? – ρяσѕρєя K Dec 11 '12 at 00:03
  • I want to access the "_type" member as well as the "description", "coordinates" and other members that are in the array named "resources". Your code looks correct to me, and I don't see why I'm getting the error that "resourceSets" has no value. My only though is that the url is returning null or something, but I don't know why. Maybe due to some authentication issues? This things is driving me crazy lol – Jade Byfield Dec 11 '12 at 00:06
  • can you also post httppost method then i will try it and find current issue? – ρяσѕρєя K Dec 11 '12 at 00:08
  • This is the link I am trying to get data from http://dev.virtualearth.net/REST/v1/Traffic/Incidents/37,-105,45,-94?key=AjNq4HS5D3H0oggdmFvr6FcPIEFQdACQXRym9i6C93zEUbr8NMQ1Ns9O7DWrgjt4 – Jade Byfield Dec 11 '12 at 00:18
  • but this link is expired on my side so send me latest one – ρяσѕρєя K Dec 11 '12 at 00:20
  • Hmm..that's weird. Can you paste the link into this page and see if it displays the result? http://jsonformat.com/#jsondataurllabel – Jade Byfield Dec 11 '12 at 00:21
  • let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/20900/discussion-between-jade-byfield-and--k) – Jade Byfield Dec 11 '12 at 00:30
  • Sorry brother I have not tried it yet, I will try in a few hours when I get home and I'll let you know :). Thank you soo much!! – Jade Byfield Dec 11 '12 at 07:00
  • Hey man, quick question. What exactly is the this line supposed to do? – Jade Byfield Dec 11 '12 at 16:53
  • join me http://chat.stackoverflow.com/rooms/20900/discussion-between-jade-byfield-and--k – ρяσѕρєя K Dec 11 '12 at 16:53