Android - Cannot read JSON string with Whitespace - android

I have a problem reading string from JSONArray. the try-catch surrounding the code fire an error for element not found. I suspect it is related with the whitespace that is the character at the end of each key of the rows.
JSONArray dettaglio = result.getJSONArray("dettaglioAttivita");
for(int i = 0; i <dettaglio.length(); i++){
JSONObject row = dettaglio.getJSONObject(i);
String durata = row.getString("Durata ");
Toast.makeText(getApplicationContext(), durata.toString(), Toast.LENGTH_LONG).show();
}
JSON RESPONSE: Note that key string of JSONObject have a whitespace at the end.
"dettaglioAttivita": [
{
"Unità Dididattica ": " FISICA - MODULO A - [UD-1] ",
"Tipo Attività ": " LEZ",
"Tipo Formaz. ": " Base",
"Settore ": " FIS/01 - FISICA SPERIMENTALE",
"CFU ": " 6",
"Durata ": " 48"
},
{
"Unità Dididattica ": " FISICA - MODULO B - [UD-2] ",
"Tipo Attività ": " LEZ",
"Tipo Formaz. ": " Base",
"Settore ": " FIS/01 - FISICA SPERIMENTALE",
"CFU ": " 6",
"Durata ": " 48"
}
],
the exception is:
org.json.JSONException: no value for Durata

Just tested in kotlin and for me it`s working with spaces:
import org.json.JSONObject
fun main(args : Array<String>) {
val json = """
{
"dettaglioAttivita": [
{
"UnitàDididattica ":"FISICA - MODULO A - [UD-1]",
"TipoAttività ":"LEZ",
"TipoFormaz. ":"Base",
"Settore ": "FIS/01 - FISICA SPERIMENTALE",
"CFU":" 6",
"Durata ":" 48"
},
{
"UnitàDididattica ":"FISICA - MODULO B - [UD-2]",
"TipoAttivit à":"LEZ",
"TipoFormaz ":"Base",
"Settore ":"FIS/01 - FISICA SPERIMENTALE",
"CFU ":"6",
"Durata ":" 48"
}
]
}
"""
println(json)
try {
val jsonObject = JSONObject(json)
val dettaglio = jsonObject.getJSONArray("dettaglioAttivita")
for (i in 0 until dettaglio.length()) {
val row = dettaglio.getJSONObject(i)
println("ROW: $row")
val durata = row.getString("Durata ")
println("DURATA: $durata")
}
}catch (e : Throwable){
println(e.toString())
}
}
Printed out in for:
ROW: {"Durata ":" 48","UnitàDididattica ":"FISICA - MODULO A - [UD-1]","TipoFormaz. ":"Base","CFU":" 6","TipoAttività ":"LEZ","Settore ":"FIS/01 - FISICA SPERIMENTALE"}
DURATA: 48
ROW: {"Durata ":" 48","CFU ":"6","UnitàDididattica ":"FISICA - MODULO B - [UD-2]","TipoFormaz ":"Base","TipoAttivit à":"LEZ","Settore ":"FIS/01 - FISICA SPERIMENTALE"}
DURATA: 48

Related

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.

Trying to parse a JSON result from Rotten Tomatoes API

I'm succeeding in getting the movie's title and year, but somehow not the synopsis. as far as I understand the object's shape they should be reachable in the same way:
JSONObject resultOBJ = new JSONObject(result);
Log.v("hhhh",resultOBJ.toString());
JSONArray movArr = resultOBJ.getJSONArray("movies");
JSONObject movOBJ =movArr.getJSONObject(0);
String title = movOBJ.getString("title");
String synop = movOBJ.getString("synopsis");
nameView.setText(title);
synopView.setText(synop);
the object I receive looks like this (sans formatting):
{
"total": 1,
"movies": [
{
"critics_consensus": "Deftly blending comedy, ...",
"id": "770672122",
"mpaa_rating": "G",
"ratings": {
"audience_rating": "Upright",
"audience_score": 87,
"critics_rating": "Certified Fresh",
"critics_score": 99
},
"release_dates": {
"dvd": "2010-11-02",
"theater": "2010-06-18"
},
"runtime": 103,
"title": "Toy Story 3",
"year": 2010,
"synopsis": "Pixar returns to their first success with ...
et cetra...
I took your example (copy/paste), closed some gates for Json ond got proper result:
public static void main(String[] args) throws JSONException {
String result = "{" +
" \"total\": 1," +
" \"movies\": [" +
" {" +
" \"id\": \"770672122\"," +
" \"title\": \"Toy Story 3\"," +
" \"year\": 2010," +
" \"mpaa_rating\": \"G\"," +
" \"runtime\": 103," +
" \"critics_consensus\": \"Deftly blending comedy,adventure, and honest emotion, Toy Story 3 is a rare second sequel that really works.\"," +
" \"release_dates\": {" +
" \"theater\": \"2010-06-18\"," +
" \"dvd\": \"2010-11-02\"" +
" }," +
" \"ratings\": {" +
" \"critics_rating\": \"Certified Fresh\"," +
" \"critics_score\": 99," +
" \"audience_rating\": \"Upright\"," +
" \"audience_score\": 87" +
" }," +
" \"synopsis\": \"Pixar returns to their first success with Toy Story 3. The movie begins with Andy leaving for college and donating his beloved toys -- including Woody (Tom Hanks) and Buzz (Tim Allen) -- to a daycare. While the crew meets new friends, including Ken (Michael Keaton), they soon grow to hate their new surroundings and plan an escape. The film was directed by Lee Unkrich from a script co-authored by Little Miss Sunshine scribe Michael Arndt. ~ Perry Seibert, Rovi\"" +
" }" +
" ]" +
"}";
JSONObject resultOBJ = new JSONObject(result);
JSONArray movArr = resultOBJ.getJSONArray("movies");
JSONObject movOBJ =movArr.getJSONObject(0);
String title = movOBJ.getString("title");
String synop = movOBJ.getString("synopsis");
System.out.println(synop);
}
Output:
Pixar returns to their first success with Toy Story 3. The movie begins with Andy leaving for college and donating his beloved toys -- including Woody (Tom Hanks) and Buzz (Tim Allen) -- to a daycare. While the crew meets new friends, including Ken (Michael Keaton), they soon grow to hate their new surroundings and plan an escape. The film was directed by Lee Unkrich from a script co-authored by Little Miss Sunshine scribe Michael Arndt. ~ Perry Seibert, Rovi

how to write java code of the json

I want to convert JSON into java code. My jsoncode as per given below.
{
"nodes": [
{
"node": {
"Name": "rahul Patel",
"Address": "\n\tAhmedabad",
"Date of Birth": "1991-05-03",
"Occupation": "developer",
"Member Since": "3 weeks 4 days"
}
}
]
java code
try {
JSONObject objResponse = new JSONObject(strResponse);
JSONArray jsonnodes = objResponse
.getJSONArray(nodes);
System.out.println("=hello this is DoinBackground");
for (i = 0; i < jsonnodes.length(); i++) {
System.out.println("hello this is for loop of DoinBackground");
JSONObject jsonnode = jsonnodes.getJSONObject(i);
JSONObject jsonnodevalue = jsonnode
.getJSONObject(node);
bean = new UserProfileBean();
bean.name = jsonnodevalue.getString(Name);
listActivities.add(bean);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
Here in logcat I print the value of before for loop System.out.println("=hello this is DoinBackground");,but value can't print under the for loop System.out.println("hello this is for loop of DoinBackground");
NOTE: Please let me know, Is it possible that we cannot used for loop in the code ? if yes then give the solution for that, There is another solution for this given problem.
Thanks.
Your json string is wrong. It must be trminated with }. Fix this and it will work.
Fixed json string:
{
"nodes": [
{
"node": {
"Name": "rahul Patel",
"Address": "\n\tAhmedabad",
"Date of Birth": "1991-05-03",
"Occupation": "developer",
"Member Since": "3 weeks 4 days"
}
}
]
}
Sample code to test:
String j = "{\r\n" +
" \"nodes\": [\r\n" +
" {\r\n" +
" \"node\": {\r\n" +
" \"Name\": \"rahul Patel\",\r\n" +
" \"Address\": \"\\n\\tAhmedabad\",\r\n" +
" \"Date of Birth\": \"1991-05-03\",\r\n" +
" \"Occupation\": \"developer\",\r\n" +
" \"Member Since\": \"3 weeks 4 days\"\r\n" +
" }\r\n" +
" }\r\n" +
" ]\r\n" +
"}";
try{
JSONObject objResponse = new JSONObject(j);
JSONArray jsonnodes = objResponse.getJSONArray("nodes" );
for (int i = 0; i < jsonnodes.length(); i++) {
JSONObject jsonnode = jsonnodes.getJSONObject(i);
JSONObject jsonnodevalue = jsonnode
.getJSONObject("node");
Log.v("name", jsonnodevalue.getString("Name"));
Log.v("address", jsonnodevalue.getString("Address"));
Log.v("occupation", jsonnodevalue.getString("Occupation"));
}
}
catch (Exception e) {
e.printStackTrace();
}
Try using Gson - http://code.google.com/p/google-gson/. Will save a lot of headache.
In your code, however make sure that your JSON string is being parsed properly.
Just to be sure objResponse.getJSONArray(nodes) should be objResponse.getJSONArray("nodes")

JSON data to android application

I got this part inside my json object. But I couldn't get this as a java List. It give error. So I tried to take it as a String Array. But it was same as before. So what should I use to parse this data to use with my android application ?
cuisine: {
-cuisine_names: [
"All (36)"
"Malaysian/ Singaporean (1)"
"Asian (1)"
"Australian (2)"
"Chinese (1)"
"European (3)"
"Spanish (1)"
"Greek (2)"
"Steak House (1)"
"Indian (1)"
"International (7)"
"Thai (1)"
"Italian (8)"
"Modern Australian (7)"
]
-price_ranges: [
"Any Price"
"$0-15"
"$15-30"
"$30+"
]
-times: [
"Any Time"
"05:30PM"
"06:00PM"
"06:30PM"
"07:00PM"
"07:30PM"
"08:00PM"
"08:30PM"
"09:00PM"
"09:30PM"
"10:00PM"
"10:30PM"
"11:00PM"
"11:30PM"
]
}
Thanks in advance !
To fill a list with a JSONObject, you should use a function like this (where NewsBSR is a custom object with some basic fields):
private ArrayList<NewsBSR> getListObjectsNews(JSONObject objNews)
{
ArrayList<NewsBSR> listNews = new ArrayList<NewsBSR>();
try{
for (Iterator iterator = objNews.keys(); iterator.hasNext();)
{
String cle = String.valueOf(iterator.next());
Object objet = objNews.get(String.valueOf(cle));
Log.v("V", "News: "+cle+ " : "+objet.toString());
if (cle.equals("results"))
{
JSONArray array = objNews.getJSONArray(cle);
for(int i = 0; i < array.length() ; i++)
{
Object obj = array.get(i);
Iterator it = ((JSONObject) obj).keys();
NewsBSR news = new NewsBSR();
while (it.hasNext())
{
String k = String.valueOf(it.next());
String val = ((JSONObject) obj).getString(k);
Log.v("V", "Array content : "+k+ " : "+val);
if (k.equals("tt") && val.length() > 0)
{
news.setTitle(val);
}
if (k.equals("dt") && val.length() > 0)
{
news.setDate(UtilsDate.stringToDate(val));
}
if (k.equals("num") && val.length() > 0)
{
news.setId(val);
}
}
listNews.add(news);
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
Log.v("V", "Error HOME: "+ e.getMessage());
e.printStackTrace();
}
return (listNews);
}
I think you have forgotten put commas. And you can use this
http://www.androidcompetencycenter.com/2009/10/json-parsing-in-android/
The json format is not supposed to be like that.
first, there should be a root object surrounding the codes like this.
{ <---this
cuisine: {
-cuisine_names: [
"All (36)"........
} <-- and this
and then you need commas between every string in the array like so
"Australian (2)",
"Chinese (1)",
"European (3)",
"Spanish (1)",
"Greek (2)",
"Steak House (1)",
It's very simple with Gson:
public class Foo
{
static String jsonInput =
"{" +
"\"cuisine\": {" +
"\"cuisine_names\": [" +
"\"All (36)\"," +
"\"Malaysian/ Singaporean (1)\"," +
"\"Asian (1)\"," +
"\"Australian (2)\"," +
"\"Chinese (1)\"," +
"\"European (3)\"," +
"\"Spanish (1)\"," +
"\"Greek (2)\"," +
"\"Steak House (1)\"," +
"\"Indian (1)\"," +
"\"International (7)\"," +
"\"Thai (1)\"," +
"\"Italian (8)\"," +
"\"Modern Australian (7)\"" +
"]," +
"\"price_ranges\": [" +
"\"Any Price\"," +
"\"$0-15\"," +
"\"$15-30\"," +
"\"$30+\"" +
"]," +
"\"times\": [" +
"\"Any Time\"," +
"\"05:30PM\"," +
"\"06:00PM\"," +
"\"06:30PM\"," +
"\"07:00PM\"," +
"\"07:30PM\"," +
"\"08:00PM\"," +
"\"08:30PM\"," +
"\"09:00PM\"," +
"\"09:30PM\"," +
"\"10:00PM\"," +
"\"10:30PM\"," +
"\"11:00PM\"," +
"\"11:30PM\"" +
"]" +
"}" +
"}";
public static void main(String[] args)
{
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
CuisineContainer cc = gson.fromJson(jsonInput, CuisineContainer.class);
System.out.println(cc);
}
}
class CuisineContainer
{
private Cuisine cuisine;
#Override
public String toString()
{
return cuisine.toString();
}
}
class Cuisine
{
private String[] cuisine_names;
private String[] price_ranges;
private String[] times;
#Override
public String toString()
{
StringBuilder result = new StringBuilder();
result.append("cuisine_names: ");
result.append(Arrays.asList(cuisine_names));
result.append(System.getProperty("line.separator"));
result.append("price_ranges: ");
result.append(Arrays.asList(price_ranges));
result.append(System.getProperty("line.separator"));
result.append("times: ");
result.append(Arrays.asList(times));
return result.toString();
}
}
output:
cuisine_names: [All (36), Malaysian/ Singaporean (1), Asian (1), Australian (2), Chinese (1), European (3), Spanish (1), Greek (2), Steak House (1), Indian (1), International (7), Thai (1), Italian (8), Modern Australian (7)]
price_ranges: [Any Price, $0-15, $15-30, $30+]
times: [Any Time, 05:30PM, 06:00PM, 06:30PM, 07:00PM, 07:30PM, 08:00PM, 08:30PM, 09:00PM, 09:30PM, 10:00PM, 10:30PM, 11:00PM, 11:30PM]

Categories

Resources