how to decode json in android - android

this is my json data
[{"FeedbackId":"1","Phoneid":"9774d56d682e549c","feedbackdate":"2011\/9 \/24","GuestName":"sdf","Address":"sdf","Phone":"456","Email":"sdf","suggestion":"sdf","grievances":"sdf","visitAgain":"0","purposeofvisit":"sdf","flag":"1"},{"FeedbackId":"2","Phoneid":"9774d56d682e549c","feedbackdate":"","GuestName":"sdf","Address":"sdf","Phone":"456","Email":"sdf","suggestion":"sdf","grievances":"sdf","visitAgain":"0","purposeofvisit":"sdf","flag":"1"},{"FeedbackId":"3","Phoneid":"9774d56d682e549c","feedbackdate":"","GuestName":"sdf","Address":"sdf","Phone":"456","Email":"sdf","suggestion":"sdf","grievances":"sdf","visitAgain":"0","purposeofvisit":"sdf","flag":"1"},{"FeedbackId":"4","Phoneid":"9774d56d682e549c","feedbackdate":"2011\/9 \/24","GuestName":"sdf","Address":"dsf","Phone":"456","Email":"sdf","suggestion":"sf","grievances":"sdf","visitAgain":"0","purposeofvisit":"sdf","flag":"1"},{"FeedbackId":"5","Phoneid":"9774d56d682e549c","feedbackdate":"2011\/9 \/24","GuestName":"sdf","Address":"dsf","Phone":"456","Email":"sdf","suggestion":"sf","grievances":"sdf","visitAgain":"0","purposeofvisit":"sdf","flag":"1"},{"FeedbackId":"6","Phoneid":"9774d56d682e549c","feedbackdate":"","GuestName":"xcv","Address":"xcv","Phone":"89","Email":"xcv","suggestion":"xcv","grievances":"xcv","visitAgain":"1","purposeofvisit":"","flag":"1"},{"FeedbackId":"7","Phoneid":"9774d56d682e549c","feedbackdate":"","GuestName":"gfhj","Address":"ghj6678","Phone":"678","Email":"ghjgh","suggestion":"678fgh","grievances":"fgh","visitAgain":"0","purposeofvisit":"sdf","flag":"1"}]
how to decode this?

You should be able to decode using the org.json package. From here:
String json = "{"
+ " \"query\": \"Pizza\", "
+ " \"locations\": [ 94043, 90210 ] "
+ "}";
JSONObject object = (JSONObject) new JSONTokener(json).nextValue();
String query = object.getString("query");
JSONArray locations = object.getJSONArray("locations");
Just use your own JSON instead of theirs.

Related

Not able to convert data in JSON format android

I have some data which I want to convert into json object. The data I want is like
{"week":"Apr 22, 2019","package_id":23,"weekdata":["2019-05-07##14:00##16:45"]}
The weekday is of array type and others are json object type. I have done some code to convert it but I am able to convert it like
{"weekdata":"[\"2019-04-01##5:0##5:0\",\"2019-04-02##5:0##5:0\"]","package_id":"44","week":"Apr 01, 2019"}
Code for this :
Code for creating weekdata array :
String firstDay = etDate1.getText().toString() + "##" + etStartTime1.getText().toString() + "##" + etEndTime1.getText().toString();
String secondDay = etDate2.getText().toString() + "##" + etStartTime2.getText().toString() + "##" + etEndTime2.getText().toString();
selectionItems.add(firstDay);
selectionItems.add(secondDay);
String[] blist = new String[selectionItems.size()];
Log.e("tag", "array" + blist.length + selectionItems);
for (int i = 0; i < selectionItems.size(); i++) {
blist[i] = selectionItems.get(i);
}
Log.e("tag", "arrayList" + blist[0]);
weekdata = new JSONArray();
for (int i = 0; i < blist.length; i++) {
weekdata.put( blist[i] );
}
Conversion into json to send it into volley :
HashMap<String, String> params = new HashMap<String, String>();
params.put("package_id", package_id);
params.put("week", weekName);
params.put("weekdata",weekdata.toString() );
JSONObject obj = new JSONObject(params);
And I get data like :
{"weekdata":"[\"2019-04-01##5:0##5:0\",\"2019-04-02##5:0##5:0\"]","package_id":"44","week":"Apr 01, 2019"}
How can I convert it like below format:
{"week":"Apr 22, 2019","package_id":23,"weekdata":["2019-05-07##14:00##16:45"]}
Please help.
This is happening because you have defined your Map as Map and converting your list to String using toString() method. Which is generating your String with . You should define your Map as Map and don't use the toString method while putting it into the Map.
Code:
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("package_id", package_id);
params.put("week", weekName);
params.put("weekdata",weekdata);
JSONObject obj = new JSONObject(params);
One question here is why are you using Map? is there is any special reason for that?
You can create JSON directly from JSONObject.
Sample Code:
JSONObject jsonObject = new JSONObject();
jsonObject.put("package_id", package_id);
jsonObject.put("week", weekName);
jsonObject.put("weekdata",weekdata);
With JSONObject you don't have to worry about generics.
As per your question,
How can I convert it like below format:
{"week":"Apr 22, 2019","package_id":23,"weekdata":["2019-05-07##14:00##16:45"]}
String firstDay = etDate1.getText().toString() + "##" +
etStartTime1.getText().toString() + "##" + etEndTime1.getText().toString();
String secondDay = etDate2.getText().toString() + "##" +
etStartTime2.getText().toString() + "##" + etEndTime2.getText().toString();
selectionItems.add(firstDay);
selectionItems.add(secondDay);
String[] blist = new String[selectionItems.size()];
Log.e("tag", "array" + blist.length + selectionItems);
for (int i = 0; i < selectionItems.size(); i++) {
blist[i] = selectionItems.get(i);
}
Log.e("tag", "arrayList" + blist[0]);
JsonArray weekdata = new JSONArray();
for (int i = 0; i < blist.length; i++) {
weekdata.put( blist[i] );
}
After this wrap this in the JsonObject
JsonObject jsonObject = new JsonObject();
jsonObject.put("package_id", package_id);
jsonObject.put("week", weekName);
jsonObject.put("weekdata",weekdata);
Log.e("jsonResult",jsonObject.toString());
Try this and let me know #mishti.

Why am I getting "java.lang.String cannot be converted to JSONObject" error?

I getting
"Value SAMPLE_JSON_RESPONSE of type java.lang.String cannot be
converted to JSONObject"
error. I think I have to format the 'SAMPLE_JSON_RESPONSE', if so please tell me how do I do that ?
private static final String SAMPLE_JSON_RESPONSE = "{\"type\":\"FeatureCollection\",\"metadata\":{\"generated\":1462295443000,\"url\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=2016-01-01&endtime=2016-01-31&minmag=6&limit=10\",\"title\":\"USGS Earthquakes\",\"status\":200,\"api\":\"1.5.2\",\"limit\":10,\"offset\":1,\"count\":10},\"features\":[{\"type\":\"Feature\",\"properties\":{\"mag\":7.2,\"place\":\"88km N of Yelizovo, Russia\",\"time\":1454124312220,\"updated\":1460674294040,\"tz\":720,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us20004vvx\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us20004vvx&format=geojson\",\"felt\":2,\"cdi\":3.4,\"mmi\":5.82,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":1,\"sig\":798,\"net\":\"us\",\"code\":\"20004vvx\",\"ids\":\",at00o1qxho,pt16030050,us20004vvx,gcmt20160130032510,\",\"sources\":\",at,pt,us,gcmt,\",\"types\":\",cap,dyfi,finite-fault,general-link,general-text,geoserve,impact-link,impact-text,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\"nst\":null,\"dmin\":0.958,\"rms\":1.19,\"gap\":17,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 7.2 - 88km N of Yelizovo, Russia\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[158.5463,53.9776,177]},\"id\":\"us20004vvx\"},\n" +
"{\"type\":\"Feature\",\"properties\":{\"mag\":6.1,\"place\":\"94km SSE of Taron, Papua New Guinea\",\"time\":1453777820750,\"updated\":1460156775040,\"tz\":600,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us20004uks\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us20004uks&format=geojson\",\"felt\":null,\"cdi\":null,\"mmi\":4.1,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":1,\"sig\":572,\"net\":\"us\",\"code\":\"20004uks\",\"ids\":\",us20004uks,gcmt20160126031023,\",\"sources\":\",us,gcmt,\",\"types\":\",cap,geoserve,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\"nst\":null,\"dmin\":1.537,\"rms\":0.74,\"gap\":25,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 6.1 - 94km SSE of Taron, Papua New Guinea\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[153.2454,-5.2952,26]},\"id\":\"us20004uks\"},\n" +
"{\"type\":\"Feature\",\"properties\":{\"mag\":6.3,\"place\":\"50km NNE of Al Hoceima, Morocco\",\"time\":1453695722730,\"updated\":1460156773040,\"tz\":0,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us10004gy9\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us10004gy9&format=geojson\",\"felt\":117,\"cdi\":7.2,\"mmi\":5.28,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":0,\"sig\":695,\"net\":\"us\",\"code\":\"10004gy9\",\"ids\":\",us10004gy9,gcmt20160125042203,\",\"sources\":\",us,gcmt,\",\"types\":\",cap,dyfi,geoserve,impact-text,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\"nst\":null,\"dmin\":2.201,\"rms\":0.92,\"gap\":20,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 6.3 - 50km NNE of Al Hoceima, Morocco\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-3.6818,35.6493,12]},\"id\":\"us10004gy9\"},\n" +
"{\"type\":\"Feature\",\"properties\":{\"mag\":7.1,\"place\":\"86km E of Old Iliamna, Alaska\",\"time\":1453631430230,\"updated\":1460156770040,\"tz\":-540,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us10004gqp\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us10004gqp&format=geojson\",\"felt\":1816,\"cdi\":7.2,\"mmi\":6.6,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":1,\"sig\":1496,\"net\":\"us\",\"code\":\"10004gqp\",\"ids\":\",at00o1gd6r,us10004gqp,ak12496371,gcmt20160124103030,\",\"sources\":\",at,us,ak,gcmt,\",\"types\":\",cap,dyfi,finite-fault,general-link,general-text,geoserve,impact-link,impact-text,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,trump-origin,\",\"nst\":null,\"dmin\":0.72,\"rms\":2.11,\"gap\":19,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 7.1 - 86km E of Old Iliamna, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-153.4051,59.6363,129]},\"id\":\"us10004gqp\"},\n" +
"{\"type\":\"Feature\",\"properties\":{\"mag\":6.6,\"place\":\"215km SW of Tomatlan, Mexico\",\"time\":1453399617650,\"updated\":1459963829040,\"tz\":-420,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us10004g4l\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us10004g4l&format=geojson\",\"felt\":11,\"cdi\":2.7,\"mmi\":3.92,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":1,\"sig\":673,\"net\":\"us\",\"code\":\"10004g4l\",\"ids\":\",at00o1bebo,pt16021050,us10004g4l,gcmt20160121180659,\",\"sources\":\",at,pt,us,gcmt,\",\"types\":\",cap,dyfi,geoserve,impact-link,impact-text,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\"nst\":null,\"dmin\":2.413,\"rms\":0.98,\"gap\":74,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 6.6 - 215km SW of Tomatlan, Mexico\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-106.9337,18.8239,10]},\"id\":\"us10004g4l\"},\n" +
"{\"type\":\"Feature\",\"properties\":{\"mag\":6.7,\"place\":\"52km SE of Shizunai, Japan\",\"time\":1452741933640,\"updated\":1459304879040,\"tz\":540,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us10004ebx\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us10004ebx&format=geojson\",\"felt\":51,\"cdi\":5.8,\"mmi\":6.45,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":1,\"sig\":720,\"net\":\"us\",\"code\":\"10004ebx\",\"ids\":\",us10004ebx,pt16014050,at00o0xauk,gcmt20160114032534,\",\"sources\":\",us,pt,at,gcmt,\",\"types\":\",associate,cap,dyfi,geoserve,impact-link,impact-text,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,\",\"nst\":null,\"dmin\":0.281,\"rms\":0.98,\"gap\":22,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 6.7 - 52km SE of Shizunai, Japan\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[142.781,41.9723,46]},\"id\":\"us10004ebx\"},\n" +
"{\"type\":\"Feature\",\"properties\":{\"mag\":6.1,\"place\":\"12km WNW of Charagua, Bolivia\",\"time\":1452741928270,\"updated\":1459304879040,\"tz\":-240,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us10004ebw\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us10004ebw&format=geojson\",\"felt\":3,\"cdi\":2.2,\"mmi\":2.21,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":0,\"sig\":573,\"net\":\"us\",\"code\":\"10004ebw\",\"ids\":\",us10004ebw,gcmt20160114032528,\",\"sources\":\",us,gcmt,\",\"types\":\",cap,dyfi,geoserve,impact-text,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\"nst\":null,\"dmin\":5.492,\"rms\":1.04,\"gap\":16,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 6.1 - 12km WNW of Charagua, Bolivia\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-63.3288,-19.7597,582.56]},\"id\":\"us10004ebw\"},\n" +
"{\"type\":\"Feature\",\"properties\":{\"mag\":6.2,\"place\":\"74km NW of Rumoi, Japan\",\"time\":1452532083920,\"updated\":1459304875040,\"tz\":540,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us10004djn\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us10004djn&format=geojson\",\"felt\":8,\"cdi\":3.4,\"mmi\":3.74,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":0,\"sig\":594,\"net\":\"us\",\"code\":\"10004djn\",\"ids\":\",us10004djn,gcmt20160111170803,\",\"sources\":\",us,gcmt,\",\"types\":\",cap,dyfi,geoserve,impact-text,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\"nst\":null,\"dmin\":1.139,\"rms\":0.96,\"gap\":33,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 6.2 - 74km NW of Rumoi, Japan\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[141.0867,44.4761,238.81]},\"id\":\"us10004djn\"},\n" +
"{\"type\":\"Feature\",\"properties\":{\"mag\":6.5,\"place\":\"227km SE of Sarangani, Philippines\",\"time\":1452530285900,\"updated\":1459304874040,\"tz\":480,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us10004dj5\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us10004dj5&format=geojson\",\"felt\":1,\"cdi\":2.7,\"mmi\":7.5,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":1,\"sig\":650,\"net\":\"us\",\"code\":\"10004dj5\",\"ids\":\",at00o0srjp,pt16011050,us10004dj5,gcmt20160111163807,\",\"sources\":\",at,pt,us,gcmt,\",\"types\":\",cap,dyfi,geoserve,impact-link,impact-text,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\"nst\":null,\"dmin\":3.144,\"rms\":0.72,\"gap\":22,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 6.5 - 227km SE of Sarangani, Philippines\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[126.8621,3.8965,13]},\"id\":\"us10004dj5\"},\n" +
"{\"type\":\"Feature\",\"properties\":{\"mag\":6,\"place\":\"Pacific-Antarctic Ridge\",\"time\":1451986454620,\"updated\":1459202978040,\"tz\":-540,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us10004bgk\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us10004bgk&format=geojson\",\"felt\":0,\"cdi\":1,\"mmi\":0,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":0,\"sig\":554,\"net\":\"us\",\"code\":\"10004bgk\",\"ids\":\",us10004bgk,gcmt20160105093415,\",\"sources\":\",us,gcmt,\",\"types\":\",cap,dyfi,geoserve,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,\",\"nst\":null,\"dmin\":30.75,\"rms\":0.67,\"gap\":71,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 6.0 - Pacific-Antarctic Ridge\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-136.2603,-54.2906,10]},\"id\":\"us10004bgk\"}],\"bbox\":[-153.4051,-54.2906,10,158.5463,59.6363,582.56]}";
private QueryUtils() {
public static ArrayList<Earthquake> extractEarthquakes() {
ArrayList<Earthquake> earthquakes = new ArrayList<>();
try {
JSONObject baseJsonResponse = new JSONObject(SAMPLE_JSON_RESPONSE);
JSONArray earthquakeArray = baseJsonResponse.getJSONArray("features");
for (int i = 0; i < earthquakeArray.length(); i++) {
JSONObject currentEarthquake = earthquakeArray.getJSONObject(i);
JSONObject properties = currentEarthquake.getJSONObject("properties");
String magnitude = properties.getString("mag");
String location = properties.getString("place");
String time = properties.getString("time");
Earthquake earthquake = new Earthquake(magnitude, location, time);
earthquakes.add(earthquake);
}
} catch (JSONException e) {
Log.e("QueryUtils", "Problem parsing the Earthquake JSON results", e);
}
return earthquakes;
}
In order to create a JSON object from a string is has to be properly escaped and it currently isn't
There is a lot of JSON in your post so I've taken the first line of the JSON to use as an example (this would be the first features object). I then unescaped the JSON and then validated the json. There are many tools to do this, but I used https://www.freeformatter.com/json-escape.html for formatting and https://jsonlint.com/ for validating the JSON. I found a few issues with the JSON object (around the new line \n escaping). I've been able to then escape the JSON by pasting it into Android Studio as shown below and the JSON now parses the string into a JSONObject.
I suggest you do the same and go line by line until you have validated all of the JSON and then paste the valid JSON between the quotation marks private static final String SAMPLE_JSON_RESPONSE = "";
Android Studio (and hopefully other IDEs should then escape the JSON correctly, or you'll have to use a JSON escaping utility)
private static final String SAMPLE_JSON_RESPONSE = "{\n" +
"\t\"type\": \"FeatureCollection\",\n" +
"\t\"metadata\": {\n" +
"\t\t\"generated\": 1462295443000,\n" +
"\t\t\"url\": \"http://Earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=2016-01-01&endtime=2016-01-31&minmag=6&limit=10\",\n" +
"\t\t\"title\": \"USGS Earthquakes\",\n" +
"\t\t\"status\": 200,\n" +
"\t\t\"api\": \"1.5.2\",\n" +
"\t\t\"limit\": 10,\n" +
"\t\t\"offset\": 1,\n" +
"\t\t\"count\": 10\n" +
"\t},\n" +
"\t\"features\": [{\n" +
"\t\t\"type\": \"Feature\",\n" +
"\t\t\"properties\": {\n" +
"\t\t\t\"mag\": 7.2,\n" +
"\t\t\t\"place\": \"88km N of Yelizovo, Russia\",\n" +
"\t\t\t\"time\": 1454124312220,\n" +
"\t\t\t\"updated\": 1460674294040,\n" +
"\t\t\t\"tz\": 720,\n" +
"\t\t\t\"url\": \"http://Earthquake.usgs.gov/earthquakes/eventpage/us20004vvx\",\n" +
"\t\t\t\"detail\": \"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us20004vvx&format=geojson\",\n" +
"\t\t\t\"felt\": 2,\n" +
"\t\t\t\"cdi\": 3.4,\n" +
"\t\t\t\"mmi\": 5.82,\n" +
"\t\t\t\"alert\": \"green\",\n" +
"\t\t\t\"status\": \"reviewed\",\n" +
"\t\t\t\"tsunami\": 1,\n" +
"\t\t\t\"sig\": 798,\n" +
"\t\t\t\"net\": \"us\",\n" +
"\t\t\t\"code\": \"20004vvx\",\n" +
"\t\t\t\"ids\": \",at00o1qxho,pt16030050,us20004vvx,gcmt20160130032510,\",\n" +
"\t\t\t\"sources\": \",at,pt,us,gcmt,\",\n" +
"\t\t\t\"types\": \",cap,dyfi,finite-fault,general-link,general-text,geoserve,impact-link,impact-text,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\n" +
"\t\t\t\"nst\": null,\n" +
"\t\t\t\"dmin\": 0.958,\n" +
"\t\t\t\"rms\": 1.19,\n" +
"\t\t\t\"gap\": 17,\n" +
"\t\t\t\"magType\": \"mww\",\n" +
"\t\t\t\"type\": \"Earthquake\",\n" +
"\t\t\t\"title\": \"M 7.2 - 88km N of Yelizovo, Russia\"\n" +
"\t\t},\n" +
"\t\t\"geometry\": {\n" +
"\t\t\t\"type\": \"Point\",\n" +
"\t\t\t\"coordinates\": [158.5463, 53.9776, 177]\n" +
"\t\t},\n" +
"\t\t\"id\": \"us20004vvx\"\n" +
"\t}]\n" +
"}";
JSONObject baseJsonResponse = new JSONObject(SAMPLE_JSON_RESPONSE);

How to parse following JSOn DATA

[
{
"ORDERID": [
"Epp144534354354",
"Epp14453sdfgsfd",
"Epp14487484",
"Epp144454464646"
],
"ADDRESS": " MUMBAI",
"FOLLOW_UPDATE": "25/5/2017",
"SIGN_IMAGE": "sign.png",
"DATE_TIME": "2017-05-02 17:52:09.0",
"EMAIL": "abhi#abhi.con",
"IMAGE_1": "image1.jpg",
"COMMENT": "gshshshsh",
"IMAGE_3": "image3.jpg",
"NAME": "abhi",
"MOBILE": "22416545",
"IMAGE_2": "image2.jpg"
}
]
I want to parse above json data then how to parse the json in android how to parse code in java
You can try this.Here is JSON parsing in android.
String response=" [\n" +
"{ \"ORDERID\": [ \"Epp144534354354\", \"Epp14453sdfgsfd\", \"Epp14487484\", \"Epp144454464646\"],\n" +
"\n" +
"\"ADDRESS\": \" 26, Wakad Road Samarth Colony, Omkar Society, Pimple Nilakh Pimpri-Chinchwad, Maharashtra 411027\",\n" +
"\n" +
"\"FOLLOW_UPDATE\": \"25/5/2017\",\n" +
"\n" +
"\"SIGN_IMAGE\": \"http://192.168.0.108:8084/MarketingApplicationImages/IMAGES//sign.png\",\n" +
"\n" +
"\"DATE_TIME\": \"2017-05-02 17:52:09.0\",\n" +
"\n" +
"\"EMAIL\": \"abhi#abhi.con\",\n" +
"\n" +
"\"IMAGE_1\": \"http://192.168.0.108:8084/MarketingApplicationImages/IMAGES//image1.jpg\",\n" +
"\n" +
"\"COMMENT\": \"gshshshsh\",\n" +
"\n" +
"\"IMAGE_3\": \"http://192.168.0.108:8084/MarketingApplicationImages/IMAGES//image3.jpg\",\n" +
"\n" +
"\"NAME\": \"abhi\",\n" +
"\n" +
"\"MOBILE\": \"8149608493\",\n" +
"\n" +
"\"IMAGE_2\": \"http://192.168.0.108:8084/MarketingApplicationImages/IMAGES//image2.jpg\"\n" +
" }]";
try {
JSONArray jArray=new JSONArray(response);
for (int i = 0; i <jArray.length() ; i++) {
JSONObject jonj=jArray.getJSONObject(i);
JSONArray orderArray=jonj.getJSONArray("ORDERID");
for (int j = 0; j <orderArray.length(); j++) {
Log.e("array value"," ..... "+orderArray.getString(i));
}
Log.e("address"," ..... "+jonj.getString("ADDRESS"));
Log.e("FOLLOW_UPDATE"," ..... "+jonj.getString("FOLLOW_UPDATE"));
Log.e("SIGN_IMAGE"," ..... "+jonj.getString("SIGN_IMAGE"));
}
} catch (JSONException e) {
e.printStackTrace();
}
To parse json please follow this basic rules which will help you in long run.
First check if json is valid or not, paste your json response and click validate json.
To view json content in proper format to understand better use paste your data in text section and switch to view section to view it.
Then use GSON library to parse the data(refer any online tutorial)
You would require pojo's for GSON use paste json response in the text box section which is located on the left hand side and then on the right hand side set source type as JSON annotation type as GSON and click on the preview at the bottom of the page, copy it and use it.

Missing keys in JSON format

I am trying to parse a JSON string in Android which is dynamical. It is a very simple JSON structure. Similar to the following:
{
"a": 1,
"b": 2,
"c": 3,
"d": 4,
"e": 5
}
But sometimes I don't get some keys. For example, the key "b" could be missing. Then my code generates a JSONParser Exception. And the further JSON string could not parsed.
So is there any way to ignore missing keys? I tried optString(); but that only works in String case, what about JSONObject and JSONArray? optJSONArray() and optJSONObject() don't work.
Any idea or solution?
I think the easiest way is to use
GSON!
You simply create a plain old java object (POJO) representing the data you want and let GSON do the rest. If the value doesn't exist in the json string, it'll be set to the "default" for that type (usally null, but is 0 for ints, false for booleans etc...)
To include in your Android Studio project:
compile 'com.google.code.gson:gson:2.2.4'
Also take a look at this page, with particular attention to the "Object Examples" heading for how to use GSON.
You can find dynamic key using belo
String jsonString = "{ \"a\": 1, \"b\": 2, \"c\": 3, \"d\": 4, \"e\": 5 }";
try {
JSONObject jsonObject = new JSONObject(jsonString);
JSONObject issueObj = new JSONObject(jsonString);
Iterator iterator = issueObj.keys();
while(iterator.hasNext()){
String key = (String)iterator.next();
Integer value = (Integer) issueObj.get(key);
Log.d(TAG,"value: "+value);
}
} catch (JSONException e) {
e.printStackTrace();
}
Or you can use GSON.
You can try convert that JSONObject to a Map using GSON, like the following:
String json1 = "{\n" +
" \"a\": 1,\n" +
" \"b\": 2,\n" +
" \"c\": 3,\n" +
" \"d\": 4,\n" +
" \"e\": 5\n" +
"}";
Gson gson1 = new Gson();
Type type1 = new TypeToken<Map<String, Integer>>(){}.getType();
Map<String, Integer> myMap1 = gson1.fromJson(json1, type1);
In your build.gradle file:
compile 'com.google.code.gson:gson:2.3.1'

How to parse the JSON in android?

"carMake": {
"Tata": [
"FIAT",
"INDICA VISTA",
"INDIGO XL"
],
"Hyndai": [
"SANTRO Xing",
"I10",
"I20",
"ACCENT",
"SONATA"
]
},
I just need to parse this part in my response. I tried with map but I am not getting it solved.
use gson.
http://code.google.com/p/google-gson/
You could try using a JSON Object parser.
Here's a link to an example http://www.jondev.net/articles/Android_JSON_Parser_Example
See the bellow example.
The response string is like this
String jsonStr = '{"menu": {' +
'"id": "file",' +
'"value": "File",' +
'"popup": {' +
'"menuitem": [' +
'{"value": "New", "onclick": "CreateNewDoc()"},' +
'{"value": "Open", "onclick": "OpenDoc()"},' +
'{"value": "Close", "onclick": "CloseDoc()"}' +
']' +
'}' +
'}}';
use the bellow code to parse the json String
// grabbing the menu object
JSONObject jsonObf=new JSONObject(jsonStr);
JSONObject menu = jsonObj.getJSONObject("menu");
// these 2 are strings
String id = menu.getString("id");
String value = menu.getString("value");
// the popop is another JSON object
JSONObject popup = menu.getJSONObject("popup");
// using JSONArray to grab the menuitems from under popop
JSONArray menuitemArr = popupObject.getJSONArray("menuitem");
// lets loop through the JSONArray and get all the items
for (int i = 0; i < menuitemArr.length(); i++) {
// printing the values to the logcat
Log.v(menuitemArr.getJSONObject(i).getString("value").toString());
Log.v(menuitemArr.getJSONObject(i).getString("onclick");
}
In your case, do the simple modifications to achieve the solution.

Categories

Resources