Android JSON parsing: parse a particular element - java

I have a mentioned bellow could you let me know how to parse only Tripname in this json
I want like
delta
Baby
bluebay
whaynle
from the json
MyJson
[{"0":"$deta","Tripname":"delta"},{"0":"Baby","Tripname":"Baby"},{"0":"bluebay","Tripname":"bluebay"},{"0":"whaynle","Tripname":"whaynle"}]
System.out.println("--RESULT--" + result);
JSONObject jObject = null;
try {
jObject = new JSONObject(result);
//JSONArray a = jObject.getJSONArray("Tripname");
String status = jObject.getString("Tripname");
//Log.v("result1", jObject.toString());
Log.v("Response", status);
}
catch (JSONException e)
{
e.printStackTrace();
}

try this:
try{
JSONArray jsonArray = new JSONArray(jsonString);
for(int i=0;i<jsonArray.length();i++){
JSONObject object = jsonArray.getJSONObject(i);
String data1 = object.getString("0");
String trip_name = object.getString("Tripname");
Log.i("TripName",trip_name);
//rest of the strings..
}
catch (JSONException e){
e.printStackTrace();
}

Do like this
JSONArray jArray= null;
try {
jArray = new JSONArray(result);
for (int i = 0; i < jArray.length(); i++) {
JSONObject jObject= jArray.getJSONObject(i);
String status = jObject.getString("Tripname");
//Log.v("result1", jObject.toString());
Log.v("Response", status);
}
}
catch (JSONException e)
{
e.printStackTrace();
}

Related

Error converting JSONArray to JSONObject

I am trying to extract and process some JSON data, but it is erroring when I try. This is my code:
protected void onPostExecute(String s) {
String err=null;
try {
JSONObject root = new JSONObject(s);
JSONObject user_data = root.getJSONObject("user_data");
LASTNAME = user_data.getString("lastname");
PASSWORD = user_data.getString("password");
EMAIL = user_data.getString("email");
} catch (JSONException e) {
e.printStackTrace();
err = "Exception: "+e.getMessage();
}
Intent i = new Intent(ctx, MainActivity.class);
i.putExtra("lastname", LASTNAME);
i.putExtra("email", EMAIL);
i.putExtra("password", PASSWORD);
i.putExtra("err", err);
startActivity(i);
}
But this is the error:
org.json.JSONException: Value [] at user_data of type org.json.JSONArray cannot be converted to JSONObject
I think you have problem with casting Array to Object.
[..] means it is JSONArray.
{..} means it is JSONObject.
try {
JSONArray jObj = new JSONArray(json);
//This is how you get value from 1 element in JSONArray
String firstObjectValue = jObj.getString(0);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
If you looking for value need you to iterate all JSONArray
by doing some simple loop.
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(result);
JSONArray jsonARRAY = jsonObject.getJSONArray("nameOfJSONArray");
for (int i = 0; i < jsonARRAY.length(); i++) {
JSONObject jsonOBJECT = (JSONObject) jsonARRAY.get(i);
String yourValue = jsonOBJECT.getString("valueKey");
}
} catch (JSONException e) {
e.printStackTrace();
}
It seems like your "user_data" is coming as json array instead of json object that you are trying to access.
you can use root.optJSONObject("user_data") to determine & return json object if your user_data is json object or will return null.

JSON object showing null pointer exception

I want to post data to the url and getting Null pointer exception
My JSON URL contains
{
"Details":
[
{
"Status":"NO UPDATES"
}
]
}
I'm getting the error the line:
String status = object.getString("Status").trim(); //error Line
Full code:
btnPost = (Button)findViewById(R.id.btnPost);
btnPost.setOnClickListener(this);
btnPost.setOnClickListener(new OnClickListener()
{
#SuppressWarnings("null")
#Override
public void onClick(View arg0)
{
try
{
String postReceiverUrl = "http://";
Log.v(TAG, "postURL: " + postReceiverUrl);
// HttpClient
#SuppressWarnings("resource")
HttpClient httpClient = new DefaultHttpClient();
// post header
HttpPost httpPost = new HttpPost(postReceiverUrl);
jsonobject.put("IDNo", IDNo.getText().toString());
jsonobject.put("Position", Position.getText().toString());
jsonobject.put("Data", Data.getText().toString());
HttpResponse response = httpClient.execute(httpPost);
String jsonResult = inputStreamToString(response.getEntity().getContent()).toString();
Log.v("jsonResult",jsonResult);
JSONObject object = new JSONObject(jsonResult);
String status = object.getString("Status").trim();
Toast.makeText(getBaseContext(), "Please wait...",100).show();
if(status.toString().equals("SUCCESS"))
{
Intent i = new Intent(LoginPage.this,MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
if(status.toString().equals("FAILED"))
{
Toast.makeText(getBaseContext(), "Wrong Credentials",100).show();
}
else
{
Toast.makeText(getBaseContext(), "Details Inserted",100).show();
}
}
catch(Exception e)
{
e.printStackTrace();
}
catch (JSONException e)
{
e.printStackTrace();
}
catch (ClientProtocolException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
});
Do proper parsing of the JSON as , you see yours response:-
{ "Details":[{"Status":"NO UPDATES"}]}
So Firstly try to make the object of the JSONObject than after the JSONArray , look at below example:-
JSONObject jsonObject = new JSONObject(jsonResult);
JSONArray detailsArray = jsonObject.getJSONArray("Details");
String status = dataArray.getJSONObject(0).getString("status");
Toast.makeText(getBaseContext(), "Please wait...",100+status).show();
your code should be like this
JSONObject object = new JSONObject(jsonResult);
JSONOArray details = object.getJSONArray("Details");
for (int i = 0; i < details.length(); i++) {
JSONObject c = details.getJSONObject(i);
String status = c.getString("Status");
}
Toast.makeText(getBaseContext(), "Please wait...",100).show();
Modift String status = object.getString("Status").trim(); to
String status = object.get("Details").getAsJsonArray()[0].getString("Status").trim();
You are using getString("Status") which may return null if key is not available in JSON. I'd suggest you to use optString("Status") it'll return blank String if key is not available.
JSONObject jsonObject = new JSONObject(stringJSON);
JSONArray jsonArray = jsonObject.optJSONArray("Details");
if(jsonArray != null){
for(int i = 0; i < jsonArray.length(); i++){
JSONObject jObject = jsonArray.optJSONObject(i);
if(jObject != null){
String strStatus = jObject.optString("Status");
}
}
}
Try this code
JSONObject object = new JSONObject(jsonResult);
JSONArray array=object.getJsonarray("Details");
for(int i=0;i<array.length();i++)
{
JSONObject innerObject=array.getJsonObject(i);
String s= innerObject.getString("Status");
}
If at any point in your code, org.json.JSONObject json_object becomes null and you wish to avoid NullPointerException (java.lang.NullPointerException), then simply check as following:
if(json_object == null) {
System.out.println("json_object is found as null");
}
else {
System.out.println("json_object is found as not null");
}

Parsing Json in Java trouble with json format android

How can I get the information from my .json file with the following format?:
[{"name":"My name","country":"Country name"}]
I’m getting with the following:
Json file:
{"name":"My name","country":"Country name"}
Java file:
#Override
protected JSONObject doInBackground(String... args) {
JsonParser jParser = new JsonParser();
JSONObject json;
json = jParser.getJSONFromUrl("http://example.com/myfile.json");
System.out.println("JSON: " + json);
if(json != null) {
try {
name = json.getString("name");
country = json.getString("country");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
You are not getting JSONObject in your response, you are getting JSONArray that holds one object. Therefore these lines are wrong
JSONObject json;
json = jParser.getJSONFromUrl("http://example.com/myfile.json");
And you should replace it with
JSONArray json;
Then you get your 0th object
JSONObject wholeObject = json.getJSONObject(0);
And get strings from it
name = wholeObject.getString("name");
country = wholeObject.getString("country");
Can you try this:
protected JSONObject doInBackground(String... args) {
JsonParser jParser = new JsonParser();
JSONObject json;
json = jParser.getJSONFromUrl("http://example.com/myfile.json");
System.out.println("JSON: " + json);
if(json != null) {
try {
JSONArray jsonArray = new JSONArray(json.toString());
JSONObject newJSON = jsonArray.get(0); //first index
name = newJSON.getString("name");
country = newJSON.getString("country");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}

how to code json array without array name?

I'm new to JSON android java eclipse. I am doing a listview with images and parsing json array. I followed this tutorial: http://www.wingnity.com/blog/android-json-parsing-and-image-loading-tutorial/ . In that tutorial, their JSON array contains the array name.However, mine doesn't contain the array name. So my question is how to code JSON Array without the array name?
Below is my JSON code.
[
{ "event_id": "EV00000001",
"event_title": "Movie 1",
},
{
"event_id": "EV00000002",
"event_title": "Movie2",
}
]
Below is my JSON coding for parsing the JSON.
protected Boolean doInBackground(String... urls) {
try {
HttpGet httppost = new HttpGet(urls[0]);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(httppost);
// StatusLine stat = response.getStatusLine();
int status = response.getStatusLine().getStatusCode();
if (status == 200) {
HttpEntity entity = response.getEntity();
String data = EntityUtils.toString(entity);
JSONObject jsono = new JSONObject(data);
JSONArray jarray = jsono.getJSONArray("actors");
for (int i = 0; i < jarray.length(); i++) {
JSONObject object = jarray.getJSONObject(i);
Events event = new Events();
event.setevent_title(object.getString("event_title"));
eventList.add(event);
}
return true;
}
//------------------>>
} catch (ParseException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return false;
}
What am i suppose to do?
This problem is solved. Thus, i will be posting the correct code.
protected Boolean doInBackground(String... urls) {
try {
//------------------>>
HttpGet httppost = new HttpGet(urls[0]);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(httppost);
// StatusLine stat = response.getStatusLine();
int status = response.getStatusLine().getStatusCode();
if (status == 200) {
HttpEntity entity = response.getEntity();
String data = EntityUtils.toString(entity);
JSONArray array = new JSONArray(data);
for (int i = 0; i < array.length(); i++) {
JSONObject obj = array.getJSONObject(i);
Events event = new Events();
event.setevent_title(obj.getString("event_title"));
eventList.add(event);
}
return true;
}
//------------------>>
} catch (ParseException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return false;
}
Here is a little example:
JSONArray array = new JSONArray();
JSONObject obj1 = new JSONObject();
obj1.put("key", "value");
array.put(obj1);
JSONObject obj2 = new JSONObject();
obj2.put("key2", "value2");
array.put(obj2);
That would look like:
[
{
"key": "value"
},
{
"key2": "value2"
}
]
If you want to get information about your JSONObjects in your JSONArray just iterate over them:
for (int i = 0; i < array.length(); i++) {
JSONObject object = (JSONObject) array.get(i);
object.get("event_id");
object.get("event_title");
}
You can use GSON librery, it's very easy to use. Just create a class (model)
public class Event{
private String event_id;
private String event_title;
...
}
and in your main activity
Event ev = new Event ("EV00000001", "Movie 1")
Gson gson = new Gson();
gSon = gson.toJson(ev);
Log.i("gson", gSon);
and you will get JSON
[
{ "event_id": "EV00000001",
"event_title": "Movie 1",
}
]
What you have is an array of JSON Objects.
What the tutorial has is a JSON Object that has a property, which has an array of JSON objects.
When you look at these, here is a simple way to differentiate the two:
[] -> Array
{} -> Object
So in your code, instead of doing
JSONObject jsono = new JSONObject(data);
JSONArray jarray = jsono.getJSONArray("actors");
You might want to do:
JSONArray jarray = new JSONArray(data);

JSON array is not being created from a stream

Basically, I'm sending a request to a server, and its reponse is "{"Result":"OK"}", which I can retrieve, however when I try and use the repsonse in my processing method:
public void ProcessData(java.lang.String stream)
{
JSONArray jsonArray;
try
{
jsonArray = new JSONArray(stream);
for(int i=0; i<jsonArray.length(); i++)
{
JSONObject jsonObject = jsonArray.getJSONObject(i);
String itemText = jsonObject.getString("text");
Response = itemText;
}
}catch (JSONException e)
{
e.printStackTrace();
}
}
if stream is "{"Result":"OK"}" it fails on this line
jsonArray = new JSONArray(stream);
Any ideas?
Because it's not a json array its a json object (starts with {)..
jsonobject = new JSONObject(stream);
doing wrong your trying to parse JsonObject to JsonArray try like
try {
JSONObject jobj = new JSONObject(Respones);
String userid = jobj.getString("Result");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
This jsonStr is a JsonObject format:
{name:value}
not a jSONArray format:
[{name:value}]
you must use:
JSONObject obj=new JSONObject(stream)
couldn't use new JSonArray(stream);
There's no JSONArray there, just a JSONObject
jsonArray = new JSONObject(stream);

Categories

Resources