i am having a issue of parsing JSON data i followed this link..
over there it has parsing data images description..
and i also refereed this in stack over flow a guy who is having same issue but no correct answer..
How to Parse JSONarray inside JSONarray in android? and
How to display Image from URL?
we can say just extention of the above questions..
its not a duplicate that guy is also same problem no answer..
i have a data like below
{
"request": "ok",
"query": {
"result": [
{
"site": [
{
"latest": [
{
"id": "2eaQy8Ow",
"data": "1/1/2014"
}
]
}
],
"flag": [
"http://www.simplydecoded.com/wp-content/uploads/2013/02/Telangana2.jpg"
]
}
]
}
}
i am using below code for parsing
JSONArray json_query_flag = c.getJSONArray("flag");
JSONArray json_query_site=c.getJSONArray("site");
System.out.println("looping json_query_site");
for (int j = 0; j < c.length(); j++) {
System.out.println("looping json_query_site[" + j +"]" + "json_query_site.length() -->" + json_query_site.length());
if (j <json_query_site.length()) {
HashMap<String, String> map1 = new HashMap<String, String>();
JSONObject sd = json_query_site.getJSONObject(j);
// get latestoffers
JSONArray json_latest = sd.getJSONArray("latest");
System.out.println(json_latest.toString());
for (int k = 0; k < json_latest.length(); k++) {
HashMap<String, String> map2 = new HashMap<String, String>();
JSONObject e = json_latest.getJSONObject(k);
My problem is that i am not getting the latest and flag..
may be parsing problem..
Hellow man thanks for understanding the problem please follow this post for the till your site and latest..
it solved I am getting text.. but problem with images I think you have flag..
for that you need to change your Listviewadapter.java file. so that images will appear
change this like
String strflag = resultp.get(Mainactivity.IMAGES);
if(strflag != null)
imageLoader.DisplayImage(strflag, flag);
else
imageLoader.DisplayImage("http://www.butterentals.com/graphics/no_image.jpg", flag);
so that I will be done.
TRy this..
JSONObject JObj = new JSONObject(response);
JSONObject query = JObj.getJSONObject("query");
JSONArray result = query.getJSONArray("result");
for (int i = 0; i < result.length(); i++) {
JSONObject jobj = result.getJSONObject(i);
JSONArray site = jobj.getJSONArray("site");
for (int j = 0; j < site.length(); j++) {
JSONObject sitobj = site.getJSONObject(j);
JSONArray latest = sitobj.getJSONArray("latest");
for (int k = 0; k < latest.length(); k++) {
JSONObject lateobj = latest.getJSONObject(k);
System.out.println("id : "+lateobj.getString("id"));
}
}
JSONArray flag = jobj.getJSONArray("flag");
for (int l = 0; l < flag.length(); l++) {
System.out.println("urls : "+flag.getString(l));
}
}
Related
This is my JSON (full JSON is here : https://pastebin.com/kyPMWcTT):
"replies": [
[
{
"id": 2,
"parent": 0,
"author": 1,
"author_name": "admin",
"author_url": "http://localhost/wordpress",
"date": "2021-05-02T08:38:00",
"content": {
"rendered": "<p>Nice Blog, Awesome !</p>\n"
},
"link": "http://localhost/wordpress/2021/05/01/one-pot-thai-style-rice-noodles/#comment-2",
"type": "comment",
}
]
I am trying to get the rendered item which is inside the content Object .
This is the Code i have tried :
JSONArray replyArray = embeddedObject.getJSONArray("replies");
for (int j = 0; j < replyArray.length(); j++) {
JSONObject contentObject = replyArray.getJSONObject(j);
JSONObject getContent = contentObject.getJSONObject("content");
String reply = getContent.getString("rendered");
Log.e("Reply is", reply);
}
But, the Logcat output is :
Value at 0 of type org.json.JSONArray cannot be converted to JSONObject
How to solve this problem ? What am i doing wrong ? Please Guide
What's Happening?
We are trying to fetch the JSONObject immediately after replies JSONArray. But, the actual content lies in the following hierarchy.
replies JSONObject -> JSONArray -> JSONArray -> ContentObject -> Content
Solution
Replace this
JSONArray replyArray = embeddedObject.getJSONArray("replies");
for (int j = 0; j < replyArray.length(); j++) {
JSONObject contentObject = replyArray.getJSONObject(j);
JSONObject getContent = contentObject.getJSONObject("content");
String reply = getContent.getString("rendered");
Log.e("Reply is", reply);
}
With this
JSONArray replyArray = embeddedObject.getJSONArray("replies");
for (int j = 0; j < replyArray.length(); j++) {
JSONArray replySubArray = replyArray.getJSONArray(j);
for (int i = 0; i < replySubArray.length(); j++) {
JSONObject contentObject = replySubArray.getJSONObject(i);
JSONObject getContent = contentObject.getJSONObject("content");
String reply = getContent.getString("rendered");
Log.e("Reply is", reply);
}
}
I have the following JSON struncture:
{
"schedule":{
"day":[
{
"id":"Monday",
"items":[
{
},
{
}
]
},
{
"id":"Tuesday",
"items":[
{
},
{
}
]
}
]
}
}
And what I basically want to do is reach the items array inside the day array which is inside the schedule object.
But whenever I try to get the second JSON array, I get getJSONArray
(int) in JSONArray cannot be applied to (java.lang.String).
JSONObject baseJsonResponse = new JSONObject(dayJSON);
JSONArray dayArray = baseJsonResponse.getJSONObject("schedule").getJSONArray("day").getJSONArray("items");
You should use Two for loop respect to JSONArray.
JSONObject obj = new JSONObject(success);
JSONObject JOBJ_Schedule = obj.getJSONObject("schedule");
JSONArray schedule_Array = JOBJ_Schedule.getJSONArray("day");
for (int i = 0; i < schedule_Array.length(); i++)
{
JSONObject jOBJ = schedule_Array.getJSONObject(i);
JSONArray jArray = jOBJ.getJSONArray("items");
for (int j = 0; j < jArray.length(); j++)
{
JSONObject jOBJNEW = jArray.getJSONObject(j);
}
}
Looks like day is a list of objects. So basically, you'd have to do something like getJSONArray("day").get(0).getJSONArray("items").
you can try this
try {
JSONObject baseJsonResponse = new JSONObject("dayJSON");
JSONObject schedule= baseJsonResponse.getJSONObject("schedule");
JSONArray day=schedule.optJSONArray("day");
for (int i=0; i<day.length(); i++) {
JSONObject data = day.getJSONObject(i);
String id = data.getString("id");
JSONArray items = data.getJSONArray("items");
for (int j = 0; j < items.length(); j++) {
JSONObject data2 = day.getJSONObject(i);
String str = data2.getString("YOurkey");
Log.e("categories", str);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
According to the JSON you provided, baseJsonResponse.getJSONObject("schedule").getJSONArray("day") will return you a JSONArray instead of JSONObject.
There is a "item" JSONArray inside each "day" JSONObject. < May be this is the reason.
You can try
for(int i = 0 ; i < baseJsonResponse.getJSONObject("schedule").getJSONArray("day").length() ; i++){
JSONArray itemArray = baseJsonResponse.getJSONObject("schedule").getJSONArray("day")
.getJSONObject(i).getJSONArray("items");
}
I am trying to take "key" value in a JSON file. I tried many solutions but I couldn't handle this ,it constantly gives me "at videos of type org.json.JSONObject cannot be converted to JSONArray" error. How can I solve this. Thank you.
My JSON data;
{ videos: {
results:[
{
id: "56c4ccbfc3a3680d52000610",
iso_639_1: "en",
iso_3166_1: "US",
key: "nIGtF3J5kn8",
}
]
}
}
My code;
JSONArray Movie_List = Search_Results.getJSONArray("videos");
for (int i = 0; i < Movie_List.length(); i++)
{
JSONObject movie = (JSONObject) Movie_List.get(i);
JSONArray Movie_List1 = movie.getJSONArray("results");
for (int j = 0; j < Movie_List1.length(); j++)
{
JSONObject movie2 = (JSONObject) Movie_List1.get(j);
key = movie2.getString("key");
}
}
The error;
Try some like this.. Your mistake come because you try to parse videos to JSONArray but it is JSONObject...
JSONObject videos = Search_Results.getJSONObject("videos");
JSONArray result= videos.getJSONArray("results");
for (int i = 0; i < result.length(); i++)
{
JSONObject movie = result.getJSONObject(i);
String movieId = movie.getString("id");
//and other values .. same way
}
i want to parse data like below format in this format there are no any left side value for parse it so any idea how can i make it possible
JSON FORMAT
{
"labels": [
"Dec-2014",
"Jan-2015",
"Feb-2015",
"Mar-2015",
"Apr-2015",
"May-2015"
],
"data": [
0,
0,
0,
0,
0,
0
]
}
Try this
try {
JSONObject jsonObject = new JSONObject(
"{\"labels\": [\"Dec-2014\",\"Jan-2015\",\"Feb-2015\",\"Mar-2015\",\"Apr-2015\",\"May-2015\"],\"data\": [0,0,0,0,0,0]}");
JSONArray array = jsonObject.getJSONArray("labels");
for (int i = 0; i < array.length(); i++) {
String s = (String) array.get(i);
System.out.println(s);
}
JSONArray array2 = jsonObject.getJSONArray("data");
for (int i = 0; i < array2.length(); i++) {
String s = (String) array2.get(i);
System.out.println(s);
}
} catch (Exception e) {
}
Hope this will solve your problem!!!
You can get jsonData as follows.
JSONObject jsonObj=new JSONObject(urJson);
JSONArray labels=jsonObj.getJSONArray("labels");
ArrayList<String> lableList=new ArrayList<String>();
for (int i = 0; i < labels.length();i++)
{
lableList.add(labels.getString(i));
}
JSONArray data=jsonObj.getJSONArray("data");
ArrayList<String> dataList=new ArrayList<String>();
for (int i = 0; i < data.length();i++)
{
dataList.add(data.getString(i));
}
There are two array objects in your current Json, You can extract it as given below
// Data json array
JSONArray dataArry = obj.getJSONArray("genre");
ArrayList<String> data = new ArrayList<String>();
for (int j = 0; j < dataArry.length(); j++)
{
data.add((String) dataArry.get(j));
}
Same logic can be applied for labels too
I cannot figure out why my parsing is not working, this is my JSON:
{
"fileVersion":"1.0",
"graves":[
{
"ID_grave":"1",
"ID_line":"1",
"sequence":"1",
"persons":[
{
"ID_person":"1",
"name":"Janez",
"surname":"Novak",
"dateBirth":"1956-08-11",
"dateDeath":"2014-02-12",
"important":"0",
"imp_desc":""
}
]
},
{
"ID_grave":"2",
"ID_line":"1",
"sequence":"2",
"persons":[
{
"ID_person":"2",
"name":"Mojca",
"surname":"Novak",
"dateBirth":"1953-02-13",
"dateDeath":"2012-04-08",
"important":"0",
"imp_desc":""
}
]
}
]
}
This code is working, when I want to get the first JSONObject:
String jsonData = convertStreamToString(in);
JSONObject json = new JSONObject(jsonData);
JSONArray name = json.getJSONArray("graves");
for (int i = 0; i < name.length(); i++) {
JSONObject grave = name.getJSONObject(i);
lineArrayList.add(grave.getString("ID_line"));
graveArrayList.add(grave.getString("ID_grave"));
}
But I would like to get the "persons" array in "graves" object. This should work but it's not, I am getting only the first persons array, where the name is Janez and not the second array where the name is Mojca:
String jsonData = convertStreamToString(in);
JSONObject json = new JSONObject(jsonData);
JSONArray name = json.getJSONArray("graves");
for (int i = 0; i < name.length(); i++) {
JSONObject grave = name.getJSONObject(i);
JSONArray persons = grave.getJSONArray("persons");
for (int k = 0; k < persons.length(); k++) {
//The problem was because of the index i, you have to change to k and it will work
JSONObject grave = persons.getJSONObject(i);
nameArrayList.add(grave.getString("name"));
surnameArrayList.add(grave.getString("surname"));
}
}
graves is a JSONArray and persons is a JSONArray into graves
for (int i = 0; i < name.length(); i++) {
JSONObject grave = name.getJSONObject(i);
JSONArray persons = grave.optJSONArray("persons");
if (persons != null) {
for (int j = 0; j < persons.length(); j++) {
}
}
}
Do your parsing as follows ,
String jsonData = convertStreamToString(in);
JSONObject json = new JSONObject(jsonData);
JSONArray name = json.getJSONArray("graves");
for (int i = 0; i < name.length(); i++) {
JSONObject grave = name.getJSONObject(i);
JSONArray persons = grave.getJSONArray("persons");
for (int k = 0; k < persons.length(); k++) {
JSONObject grave = persons.getJSONObject(i);
nameArrayList.add(grave.getString("name"));
surnameArrayList.add(grave.getString("surname"));
}
}
Try This:
for (int i = 0; i < name.length(); i++) {
JSONObject grave = name.getJSONObject(i);
JSONArray persons = grave.optJSONArray("persons");
if (persons != null) {
for (int j = 0; j < persons.length(); j++) {
JSONObject grave= persons.getJSONObject(i);
lineArrayList.add(grave.getString("ID_line"));
//so on..
}
}
Ok only today I discovered that I am getting the data only from the first persons array and from the second where for example is a person with a name Mojca..I tried all the three given solutions but nothing works..