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;
}
Related
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();
}
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.
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");
}
Am new to android development am making simple login application using volley and getting json response from server like this:
json response:-
{"loginResult":"{\"UserLoginID\":864,\"UserID\":864,\"EmployeeCode\":\"PI4264\",\"Password\":\"XXXX\",\"IsPasswordChanged\":false,\"ModuleName\":\"XXX\",\"ModuleID\":1,\"EmployeeName\":\"XXXX \"}"}
When i try to parse this jsonobect am getting :
Unterminated object at 19 jsonexception so far what i have tried is to parse is
String resp = response.toString().replaceAll("\\\\", "");
try {
JSONObject yog = new JSONObject(resp);
int yogs=yog.getInt("UserID");
Toast.makeText(getApplicationContext(), resp, Toast.LENGTH_SHORT).show();
} catch (JSONException e) {
e.printStackTrace();
}
don't know where am making mistake can anybody teach me am i doing it in right way!!!
You should change your code to this:
String resp = response.toString().replaceAll("\\\\", "");
try {
JSONObject yog = new JSONObject(resp);
JSONObject loginObject = new JSONObject(yog.getString("loginResult"));
int yogs=loginObject.getInt("UserID");
Toast.makeText(getApplicationContext(), resp, Toast.LENGTH_SHORT).show();
} catch (JSONException e) {
e.printStackTrace();
}
I executed the code and didn't get the error:
JSONObject yog = new JSONObject("{\"loginResult\":\"{\\\"UserLoginID\\\":864,\\\"UserID\\\":864,\\\"EmployeeCode\\\":\\\"PI4264\\\"," +
"\\\"Password\\\":\\\"XXXX\\\",\\\"IsPasswordChanged\\\":false,\\\"ModuleName\\\":\\\"XXX\\\",\\\"ModuleID\\\":1,\\\"EmployeeName\\\":\\\"XXXX " +
"\\\"}\"}");
JSONObject loginObject = new JSONObject(yog.getString("loginResult"));
int yogs=loginObject.getInt("UserID");
Toast.makeText(getApplicationContext(), String.valueOf(yogs), Toast.LENGTH_SHORT).show();
You are making an un-necessary string sanitization.
Just remove replaceAll command. and use following code :
try {
JSONObject yog = new JSONObject(response);
JSONObject loginObject = new JSONObject(yog.getString("loginResult"));
int yogs=loginObject.getInt("UserID");
System.out.println(yogs);
}
catch (JSONException e) {
e.printStackTrace();
}
This should work fine after that.
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);