How to read status from json response - android

I have a json response below.
{
"Table":[
{
"status":"failed",
"message":"Questions exausted for the Course"
}
]
}
I have to read status from the response. I have tried as below. But I am unable to read. Please help me guys.
if (result != null
&& !result.toLowerCase()
.startsWith("{\"status\":\"invalid") ) {
mysql.setLastRowCount(lastrowcount);
System.out.println("PE result in : " + result);
try {
JSONObject resultJson = new JSONObject(result);
JSONArray resultArray = resultJson.getJSONArray("Table");
String status=resultJson.getString("status");
System.out.println("Ravi Today "+status);
for (int i = 0; i < resultArray.length(); i++) {
try {
JSONObject tempJSONOBJECT = resultArray
.getJSONObject(i);
bean.setQuestion(tempJSONOBJECT
.getString(Constants.TAG_QUESTION));
bean.setOption1(tempJSONOBJECT
.getString(Constants.TAG_OPT1));
bean.setOption2(tempJSONOBJECT
.getString(Constants.TAG_OPT2));
bean.setOption3(tempJSONOBJECT
.getString(Constants.TAG_OPT3));
bean.setOption4(tempJSONOBJECT
.getString(Constants.TAG_OPT4));
bean.setOption5(tempJSONOBJECT
.getString(Constants.TAG_OPT5));
bean.setOption6(tempJSONOBJECT
.getString(Constants.TAG_OPT6));
bean.setOption7(tempJSONOBJECT
.getString(Constants.TAG_OPT7));
bean.setOption8(tempJSONOBJECT
.getString(Constants.TAG_OPT8));
bean.setRightAnswer(tempJSONOBJECT
.getString(Constants.TAG_ANSWER));
bean.setMedia(tempJSONOBJECT
.getString(Constants.TAG_MEDIA));
bean.setNumberOfOptions(tempJSONOBJECT
.getInt(Constants.TAG_NO_OPTIONS));
bean.setOptionMode(tempJSONOBJECT
.getString(Constants.TAG_MULTI_SELECT));
bean.setExplanation(tempJSONOBJECT
.getString(Constants.TAG_EXPLANATION));
bean.setQuestionID(tempJSONOBJECT
.getString(Constants.TAG_QID));
bean.setStatus(tempJSONOBJECT
.getString(Constants.TAG_STATUS));
bean.setMessage(tempJSONOBJECT
.getString(Constants.TAG_MESSAGE));
bean.setSubjectID(subjectid);
mysql.addToQuestionsTable(bean);
} catch (Exception _ex) {
_ex.printStackTrace();
}
if (tablehasrows == false) {
if (mysql.getTableRowCount("questionmastermain",
"SUBJECT_ID", subjectid) > 0) {
mysql.getNextQuestion(subjectid, false);
tablehasrows = true;
}
}
}

Try like below:
JSONObject resultJson = new JSONObject(result);
JSONArray resultArray = resultJson.getJSONArray("Table");
for (int i = 0; i < resultArray.length(); i++) {
JSONObject b = venues.getJSONObject(i);
String status = b.getString("status");
}

Try this,,,
if(result!=null){
try {
JSONObject jsonObj =new JSONObject(result);
tablejsonarray=jsonObj.getJSONArray("Table");
for(int i=0;i<tablejsonarray.length();i++){
JSONObject l=tablejsonarray.getJSONObject(i);
status=l.getInt("status");
}
} catch (JSONException e) {
e.printStackTrace();
}
}

Related

How to parse a JSONArray and assign it to different TextViews?

I have a JSONArray and when I try to parse it, an NPE shows and the logcat shows W/System.err: org.json.JSONException: Value at 0 is null. Please help. I have provided my codes below.
JSON Array
[
{
"student_number":"201411870",
"full_name":"Miranda , Andrew Matthew Matera",
"year":"4",
"course":"BSIT"
}
]
Code Snippet
ArrayList<User> userArrayList = new JsonConverter<User>().toArrayList(response, User.class);
JSONArray jsonArray = new JSONArray(userArrayList);
try {
int regStudentNumber = jsonArray.getJSONObject(0).getInt("student_number");
String regFullName = jsonArray.getJSONObject(1).getString("full_name");
int regYear = jsonArray.getJSONObject(2).getInt("year");
String regCourse = jsonArray.getJSONObject(3).getString("course");
tvStudentNumber.setText(String.valueOf(regStudentNumber));
tvFullName.setText(regFullName);
tvYear.setText(String.valueOf(regYear));
tvCourse.setText(regCourse);
} catch (JSONException e) {
e.printStackTrace();
}
Solved it on my own. Sorry for the unclear question.
try {
JSONArray jsonArray = new JSONArray(response);
if(jsonArray != null) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
int regStudentNumber = jsonObject.getInt("student_number");
String regFullName = jsonObject.getString("full_name");
int regYear = jsonObject.getInt("year");
String regCourse = jsonObject.getString("course");
tvStudentNumber.setText(String.valueOf(regStudentNumber));
tvFullName.setText(regFullName);
tvYear.setText(String.valueOf(regYear));
tvCourse.setText(regCourse);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
First of all parse JSON array to object to make clear it is for a particular value then fetch things from it based on need.
To parse json array to object use code
try {
JSONArray jsonArray = new JSONArray(response);
if(jsonArray != null) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
}
}
} catch (JSONException e) {
e.printStackTrace();
}

getJsonObject in JsonObject cannot be applied to int

I'm getting the above-mentioned error while trying to extract data from JSONObject.My objective is to extract the "transactionId" data and store it in a variable for future use.
What I have so far:
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (pd.isShowing()) {
pd.dismiss();
}
/*txtJson.setText(result);*/
JSONObject jsonarray;
try {
jsonarray = new JSONObject(result);
for (int i = 0; i < jsonarray.length(); i++) {
JSONObject mJsonObject = jsonarray.getJSONObject(i);
Log.d("OutPut", mJsonObject.getString("transactionId"));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
My JSON Object is shown below:
{
"merchantId":"X",
"transactionId":"Y"
}
I'm new to Programming so any help would be appreciated.
Try this code
JSONArray jsonarray;
try {
jsonarray = new JSONArray(result);
for (int i = 0; i < jsonarray.length(); i++) {
JSONObject mJsonObject = jsonarray.optJSONObject(i);
Log.d("OutPut", mJsonObject.optString("transactionId"));
}
} catch (JSONException e) {
e.printStackTrace();
}
Also, if there is single ITEM in your JSONArray, you can remove forLoop.
And, if the response received is JSONObject then,
JSONObject jsonObject;
try {
jsonObject = new JSONObject(result);
Log.d("OutPut", jsonObject.optString("transactionId"));
} catch (JSONException e) {
e.printStackTrace();
}

deleting value inside JsonArray

I wanna delete the value inside this jsonArray:
{"category_ids":[0,1,2,3,4,5],"keyword":""}
For example, i wanna remove 0 from category_ids jsonArray.
Can anybody help me? Thanks in advance.
String load = "{\"category_ids\":[0,1,2,3,4,5],\"keyword\":\"\"}";
try {
JSONObject jsonObject_load = new JSONObject(load);
JSONArray jsonArray = jsonObject_load.getJSONArray("category_ids");
Log.d("out", RemoveJSONArray(jsonArray,1).toString());
} catch (JSONException e) {
e.printStackTrace();
}
public static JSONArray RemoveJSONArray( JSONArray jarray,int pos) {
JSONArray Njarray = new JSONArray();
try {
for (int i = 0; i < jarray.length(); i++) {
if (i != pos)
Njarray.put(jarray.get(i));
}
} catch (Exception e) {
e.printStackTrace();
}
return Njarray;
}
Below API 19
String result = "{\"category_ids\":[0,1,2,3,4,5],\"keyword\":\"\"}";
try {
JSONObject jsonObject = new JSONObject(result);
JSONArray jsonArray = jsonObject.getJSONArray("category_ids");
jsonArray = removeValue(jsonArray, 0); // below api 19
// jsonArray.remove(0); // above api 19
} catch (JSONException e) {
e.printStackTrace();
}
public JSONArray removeValue(JSONArray jsonArray, int index) {
JSONArray copyArray = new JSONArray();
try {
if (index < jsonArray.length()) {
for (int i = 0; i < jsonArray.length(); i++) {
if (i != index) {
copyArray.put(jsonArray.get(i));
}
}
}
} catch (JSONException e) {
e.printStackTrace();
}
return copyArray;
}
Above API 19 use jsonArray.remove(0);
I hope this will help you.

Parsing json response extraction

// Reading json file from assets folder
StringBuffer sb = new StringBuffer();
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(getAssets().open(
"boysquestion.json")));
String temp;
while ((temp = br.readLine()) != null)
sb.append(temp);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close(); // stop reading
} catch (IOException e) {
e.printStackTrace();
}
}
String myjsonstring = sb.toString();
// Try to parse JSON
String question = null;
try {
// Creating JSONObject from String
JSONObject jsonObjMain = new JSONObject(myjsonstring);
// Creating JSONArray from JSONObject
JSONArray jsonArray = jsonObjMain.getJSONArray("category");
// JSONArray has x JSONObject
for (int i = 0; i < jsonArray.length(); i++) {
// Creating JSONObject from JSONArray
JSONObject jsonObj = jsonArray.getJSONObject(i);
// Getting data from individual JSONObject
question = jsonObj.getString("question");
int no_score = jsonObj.getInt("no_score");
int yes_score = jsonObj.getInt("yes_score");
int category = jsonObj.getInt("category");
Log.d("question boys", question);
tvBoyGirl.setText(question);
Log.d("random", question);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Json Response ,how to extract all things :
[{"category":1,"no_score":3,"question":"Does he ever send the first text of a conversation?","yes_score":1},{"category":1,"no_score":3,"question":"Does he reply with two or three word answers?","yes_score":1}]
Above is json response.. i want to extract each and everything..i.e category,no_score,yes_score and question..
i have tried
question = jsonObj.getString("question");
but i am not getting.. can anyone help me to extract.
Json object start with { and json array starts with [. In your case the json is an array.
So read it as an array instead of jsonobject.
i.e, you need to read it like below.
JSONArray jsonArray = new JSONArray(myjsonstring);
and iterate through the array and read each values.
Your for loop looks fine.
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObj = jsonArray.getJSONObject(i);
question = jsonObj.getString("question");
int no_score = jsonObj.getInt("no_score");
int yes_score = jsonObj.getInt("yes_score");
int category = jsonObj.getInt("category");
tvBoyGirl.setText(question);
}
This is what i do after all things
ListQuestion();
tvQuestionText.setText(questions.get(i));
imUp.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
i++;
question_counter++;
tvQuestionCounter.setText(String.valueOf(question_counter));
if (!questions.isEmpty()) {
tvQuestionText.setText(questions.get(i));
if (yes_Score1.get(i) == -1) {
score = score - 1;
} else {
score = score + yes_Score1.get(i);
}
System.out.println(score);
Log.d("yes_per", String.valueOf(score));
counter++;
if (counter == 25) {
calculation();
}
}
}
});
imDown.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
i++;
question_counter++;
tvQuestionCounter.setText(String.valueOf(question_counter));
if (!questions.isEmpty()) {
tvQuestionText.setText(questions.get(i));
if (no_Score1.get(i) == -1) {
score = score - 1;
} else {
score = score + no_Score1.get(i);
}
Log.d("no_per", String.valueOf(score));
System.out.println(score);
counter++;
if (counter == 25) {
calculation();
}
}
}
});
}
Try this:
JSONArray jArray = new JSONArray(jsonString);
for(int i=0;i<jArray.length();i++)
{
JSONObject jObj = jArray.getJSONObject(i);
question = jObj.getString("question");
int no_score = jObj.getInt("no_score");
int yes_score = jObj.getInt("yes_score");
int category = jObj.getInt("category");
}

How to Parse the JSON response which contains the two arraylist

I am having the response of one of webservice to get the feeds list and in that response i am getting the two array with the same name.
The problem is that i am not able get the details of the inner array i.e. "ProfileName", "ImageUrl" etc..
I have tried the json parsing.
Below is the response of JSON:
{"Status":true,
"result":
[
{"result": [
{"ProfileName":"followers5","ImageUrl":"http:\/\/192.168.0.1\/webservice2\/uploads\/81.png","Likes":3,"Hearts":2},
{"ProfileName":"followers5","VideoUrl":"http:\/\/192.168.0.1\/webservice2\/uploads\/81.mp4","Likes":0,"Hearts":0}
]}
,{"result":[
{"ProfileName":"followers6","ImageUrl":"http:\/\/192.168.0.1\/webservice2\/uploads\/82.png","Likes":0,"Hearts":2},
{"ProfileName":"followers6","VideoUrl":"http:\/\/192.168.0.1\/webservice2\/uploads\/82.mp4","Likes":0,"Hearts":0}
]}
]
}
I have tried as below:
class feedtask extends AsyncTask<String, Integer, String> {
#Override
protected String doInBackground(String... params) {
Httputils getmethod = new Httputils();
try {
result = getmethod.Getrequest("feeds.php?uid=76");
System.out.println("Feeds Result--->" + result);
JSONObject jobj = new JSONObject(result);
JSONArray ja = jobj.getJSONArray("result");
for (int i = 0; i < ja.length(); i++) {
for (int j = 0; j <= i; j++) {
JSONObject jo = ja.getJSONObject(j);
abcd.add(jo.getString("ProfileName"));
System.out.println("Profile Name--->"
+ jo.getString("ProfileName"));
}
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}
Please help me out to get the details of the second array.
Any help will be appreciated.
Thank you.
try
{
JSONObject _JSONResponse=new JSONObject(response);
String status=_JSONResponse.getString("Status");
JSONArray _ArrayResponse=_JSONResponse.getJSONArray("result");
for(int i=0;i<_ArrayResponse.length();i++)
{
JSONArray object=_ArrayResponse.getJSONObject(i).getJSONArray("result");
for(int j=0;j<object.length();j++)
{
JSONObject jObject=object.getJSONObject(j);
ProfileName=jObject.getString("ProfileName") ;
VideoUrl=jObject.optString("VideoUrl") ;
Likes=jObject.optString("Likes") ;
Hearts=jObject.optString("Hearts") ;
Log.i(TAG,ProfileName +" "+VideoUrl +" "+Likes+" " +Hearts);
}
}
}
catch(JSONException e){Log.e(TAG,e.toString());}
try{
JSONObject responseJson = new JSONObject(response);
if(responseJson.has("result")){
JSONArray resultJsonArr = responseJson.getJSONArray("result");
for(int i=0; i<resultJsonArr.length(); i++){
JSONObject resultInstanceJson = resultJsonArr.getJSONObject(i);
if(resultInstanceJson.has("result")){
JSONArray resultArr = resultInstanceJson.getJSONArray("result");
for(int j=0; j<resultArr.length(); j++){
JSONObject jsonResult = resultArr.getJSONObject(j);
String profileNAme = jsonResult.getString("ProfileName");
String imageUrl = "", videoUrl = "";
//image url
if(jsonResult.has("ImageUrl")){
imageUrl = jsonResult.getString("ImageUrl");
}
//video url
if(jsonResult.has("VideoUrl")){
videoUrl = jsonResult.getString("VideoUrl");
}
}
}
}
}
}catch(Exception e){
e.printStackTrace();
}
try this way
for (int i = 0; i < ja.length(); i++) {
JSONObject jo = ja.getJSONObject(i);
JSONArray innerResult = jo.getJSONArray("result");
int size = innerResult.legth();
for (int j = 0; j < size; j++) {
JSONObject innerJo = innerResult.getJSONObject(j);
abcd.add(innerJo.getString("ProfileName"));
}
}
Edit:
public class InfoHolder {
public String profileName;
public String imageUrl;
public String videUrl;
}
for (int j = 0; j < size; j++) {
InfoHolder holder = new InfoHolder();
JSONObject innerJo = innerResult.getJSONObject(j);
// the same for imageUrl and videoUrl
holder.profileName = innerJo.getString("ProfileName");
abcd.add(holder);
}
of course you have to change from String to InfoHolder your abcd collectio
Try this:
try {
result = getmethod.Getrequest("feeds.php?uid=76");
System.out.println("Feeds Result--->" + result);
JSONObject jobj = new JSONObject(result);
JSONArray ja = jobj.getJSONArray("result");
for (int i = 0; i < ja.length(); i++) {
for (int j = 0; j < i; j++) {
JSONObject jo = ja.getJSONObject(j);
JSONArray resultJA = jo.getJSONArray("result");
for(int k=0;k< resultJA.length();k++){
JSONObject jo_inside = resultJA.getJSONObject(k);
String profileName = jo_inside.getString("ProfileName");
//use optString on JSONOBject. it will return empty String if that key does not exists or else the value u want. it won't give any exceptions.
String ImageURL = jo_inside.optString("ImageUrl");
String VideoURL = jo_inside.optString("VideoUrl");
}
}
}
}
catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}
You do
for (int i = 0; i < ja.length(); i++) {
ok for the first array now you need to get the array inside each cells of the first
For example :
JSONObject jo = ja.getJSONObject(i);
JSONArray ja2 = jo.getJSONArray("result");
then and only then you do the second loop
Maybe this answer isn't complete but the idea is here

Categories

Resources