Im trying to parse JSON and my code is not working with one URL and it works with other. I think its the coma in question but I did not sure so please look at my code and help. I tried to replace coma with dot in loop, but what i get is JSON Exception. And when I change the URL, there is no exception. Confusing… This is not working URL: http://api.hnb.hr/tecajn/v1 And this is one I tested and it works: https://newsapi.org/v2/top-headlines?country=us&category=business&apiKey=e402c76fc8584a1c81849179f1277a74 While changed the URL I also changed the data, so its not the problem in writing..I guess
Here is my code for coma replacement:
private String convertStreamToString(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line; try { while ((line = reader.readLine()) != null) { String coma = line.replaceFirst(",","."); sb.append(coma).append('n'); } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); }
And the other part with URL and JSONArray:
@Override protected Void doInBackground(Void... arg0) { URLconnection urlConn = new URLconnection(); // Making a request to url and getting response String url = "http://api.hnb.hr/tecajn/v1"; //.........connection......... String response = urlConn.makeServiceCall(url); Log.e(TAG, "Response from url: " + response); if (response != null) { try { JSONObject jsonObj = new JSONObject(response); // Getting JSON Array node arr = jsonObj.getJSONArray("values"); for (int i = 0; i < article.length(); i++) { JSONObject c = arr.getJSONObject(i); header = c.getString("Valuta"); } } catch (final JSONException e) { Log.e(TAG, "Json parsing error."); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "Json parsing error: 216", Toast.LENGTH_LONG).show(); } }); }
Answer
Commas aren’t the issue. It’s the very first character. One is a square bracket and the other is a curly one.
You therefore need to parse the first response as an Array rather than an Object
new JSONArray(response);
That being said, you therefore cannot use the same methods for both URLs