I am trying to parse a json array from json string but it always throws the exception data of type java.lang.String cannot be converted to JSONArray
.
Please tell me if I make any mistake.
Thanks.
Here is my codes to get Json from server:
try {
String url = String.format(<url here>, province.provinceCode2);
HttpClient httpClient = getHttpClient();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity entity = httpResponse.getEntity();
final String result = EntityUtils.toString(entity);
parseAndSaveJsonData(province, result);
} catch (Exception e) {
e.printStackTrace();
}
here is codes to parse JsonArray:
String jsonString = <below json string>
JSONArray ja = new JSONArray(jsonString);
Here is my json string:
[
{
"LotPrizes":[
{
"Prize":"Giảitám",
"Range":"50"
},
{
"Prize":"Giảibảy",
"Range":"264"
},
{
"Prize":"Giảisáu",
"Range":"3654-5162-3097"
},
{
"Prize":"Giảinăm",
"Range":"9739"
},
{
"Prize":"Giảitư",
"Range":"97690-99274-32442-69432-04855-10132-17085"
},
{
"Prize":"Giảiba",
"Range":"73745-13007"
},
{
"Prize":"Giảinhì",
"Range":"05521"
},
{
"Prize":"Giảinhất",
"Range":"74870"
},
{
"Prize":"GiảiDB6",
"Range":"878833"
}
]
},
{
"LotPrizes":[
{
"Prize":"Giảitám",
"Range":"50"
},
{
"Prize":"Giảibảy",
"Range":"264"
},
{
"Prize":"Giảisáu",
"Range":"3654-5162-3097"
},
{
"Prize":"Giảinăm",
"Range":"9739"
},
{
"Prize":"Giảitư",
"Range":"97690-99274-32442-69432-04855-10132-17085"
},
{
"Prize":"Giảiba",
"Range":"73745-13007"
},
{
"Prize":"Giảinhì",
"Range":"05521"
},
{
"Prize":"Giảinhất",
"Range":"74870"
},
{
"Prize":"GiảiDB6",
"Range":"878833"
}
]
}
]
String value = (String) jsonObject. get("key_name"); Just like other element retrieve the json array using the get() method into the JSONArray object.
We can also add a JSONArray to JSONObject. We need to add a few items to an ArrayList first and pass this list to the put() method of JSONArray class and finally add this array to JSONObject using the put() method.
Advertisements. JSON stands for JavaScript Object Notation.It is an independent data exchange format and is the best alternative for XML. This chapter explains how to parse the JSON file and extract necessary information from it. Android provides four different classes to manipulate JSON data.
This is how to initialize a JSON parser:
JSONObject jsonObject = new JSONObject(jsonString);
That will give you the entire string as a Json Object. From there, pull out an individual array as a JsonArray, like this:
JSONArray jsonArray = jsonObject.getJSONArray("LotPrizes");
To access each "LotPrizes" you can use for loop logic:
for(int i=0;i<jsonArray.length();i++)
{
JSONObject curr = jsonArray.getJSONObject(i);
prize = curr.getString("Prize")
//Do stuff with the Prize String here
//Add it to a list, print it out, etc.
}
EDIT: Final code after your JSON edit:
JSONArray jsonArray = null;
String jsonString = <your string>
String currPrize = null;
JSONObject jsonObject = new JSONObject(jsonString);
jsonArray = jsonObject.getJSONArray("data");
for(int i=0;i<jsonArray.length();i++)
{
JSONArray currLot = jsonArray.getJSONObject(i);
for(int j=0; j<currLot.length();j++)
{
JSONobject curr = currLot.getJSONObject(j);
currPrize = curr.getString("Prize");
//Do something with Prize
}
}
This code is functional and I'm using an almost identical version in my code. Hope this (finally) works for you.
Hi @Caerulius, Harish, ρяσѕρєя K, Hot Licks , and all. Finally, after 2 days of headache and 2 sleepless nights, I solved the issue. And because you spend your valued time to discuss with me, I see that I have to tell you the root cause. That's my responsibility.
First of all, I am a senior android developer. So, I at least know about JSON basic, I know how to parse data from JSON string, and I know many useful online tools to validate it. I confirm that the JSON string I got from server is valid.
As I told in my question, I used final String result = EntityUtils.toString(entity);
to get JSON string from HttpEntity
object. I have used this many times in the past and it worked. No problem. But, in this case, it's not.
The original JSON string like this:
[{
"LotPrizes":[
{
"Prize":"Giảitám",
"Range":"50"
},
{
"Prize":"Giảibảy",
"Range":"264"
},
...
}]
But what I got like this:
"[{
\"LotPrizes\":[
{
\"Prize":\"Giảitám\",
\"Range\":\"50\"
},
{
\"Prize\":\"Giảibảy\",
\"Range\":\"264\"
},
...
}]"
This string is similar with the constant string which we may declare as below:
String stringVariable = "\"[{
\\\"LotPrizes\\\":[
{
\\\"Prize":\\\"Giảitám\\\",
\\\"Range\\\":\\\"50\\\"
},
{
\\\"Prize\\\":\\\"Giảibảy\\\",
\\\"Range\\\":\\\"264\\\"
},
...
}]\" ;
It's a valid string, but not a valid JSON String.
To fix this issue, I change the way to get JSON string, and remove unnecessary characters like this:
HttpClient httpClient = getHttpClient();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity entity = httpResponse.getEntity();
InputStream is = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
String json = sb.toString();
json = json.replace("\\", "");
json = json.substring(1);
json = json.substring(0, json.length() - 2);
Now, the json
variable contain JSON string which I can parse correctly. I think this should a bug of HttpEntity library.
Hope this helps some other guys.
You can retrieve the jsondata from your string as follows ..
JSONObject json = new JSONObject(jsonString);
JSONArray jData = json.getJSONArray("data");
for (int i = 0; i < jData.length(); i++) {
JSONObject jo = jData.getJSONObject(i);
JSONArray jLotPrizes = jo.getJSONArray("LotPrizes");
for (int j = 0; j < jLotPrizes.length(); j++) {
JSONObject jobj = jLotPrizes.getJSONObject(j);
Log.i("Prize", "" + jobj.getString("Prize"));
Log.i("Range", "" + jobj.getString("Range"));
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With