0

im trying to parse json data sent from php using android. Here is the code. the json output looks something like this : "{documents:[{idnumber:'28044684',doctype:'National ID'}],success:1}"

im getting the error ERROR parsing JSONObject value [null]; even when I directly assign the json output to the variable json. What could be the problem??

String json = "";
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("idnumber", parameter));
        // Making HTTP request
        try {

            // check for request method
            if (method == "POST") {
                // request method is POST
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params));
                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();

            } else if (method == "GET") {
                // request method is GET
                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);
                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
            }

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 300);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line=reader.readLine())!= null ) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }
        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (Exception e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
            try {
                jObj = new JSONObject(json.substring(json.indexOf("{"),
                        json.lastIndexOf("}") + 1));
            } catch (Exception e0) {
                Log.e("JSON Parser0",
                        "Error parsing data [" + e0.getMessage() + "] "
                                + json);
                Log.e("JSON Parser0", "Error parsing data " + e0.toString());
                try {
                    jObj = new JSONObject(json.substring(1));
                } catch (Exception e1) {
                    Log.e("JSON Parser1",
                            "Error parsing data [" + e1.getMessage() + "] "
                                    + json);
                    Log.e("JSON Parser1",
                            "Error parsing data " + e1.toString());
                    try {
                        jObj = new JSONObject(json.substring(2));
                    } catch (Exception e2) {
                        Log.e("JSON Parser2",
                                "Error parsing data [" + e2.getMessage()
                                        + "] " + json);
                        Log.e("JSON Parser2",
                                "Error parsing data " + e2.toString());
                        try {
                            jObj = new JSONObject(json.substring(3));
                        } catch (Exception e3) {
                            Log.e("JSON Parser3", "Error parsing data ["
                                    + e3.getMessage() + "] " + json);
                            Log.e("JSON Parser3", "Error parsing data "
                                    + e3.toString());
                        }
                    }
                }
            }
        }
        return null;
2
  • json parsing is really simple but not what you did. Try some tutorials Commented May 3, 2013 at 10:20
  • You'll have to be more specific, it could really be anything, even the "return null". Try to trim it down to the simplest example possible, with a hardcoded string and no fallbacks. Commented May 3, 2013 at 10:22

2 Answers 2

3

Your JSON is invalid

{
documents: [
    {
        idnumber: '28044684',
        doctype: 'NationalID'
    }
],
success: 1
}

Refer : http://json.org/example.html for some correct format

The correct format should be

{
"documents": [
    {
        "idnumber": "28044684",
        "doctype": "NationalID"
    }
],
"success": 1
}

Validate here

Sign up to request clarification or add additional context in comments.

1 Comment

In JSON all quotes are double quotes, so "NationalID" instead of 'NationalID', and all keys must be quoted, so "documents": instead of documents:
2

Try changing your try block after the catch's to this

 try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

and then extract the information you want directly from the JSONObject returned

JSONObject json = jsonParser.makeHttpRequest(host + url_app_list,
                    "GET", params);

            if (json == null) {
                Log.e("Server Warning", "No Server Response");
                message = "No Server Response";
            } else {

                Log.d("All Apps: ", json.toString());

                try {

                    success = json.getInt(TAG_SUCCESS);

                    if (success == 1) {

                        apps = json.getJSONArray(TAG_APPS);

                        for (int i = 0; i < apps.length(); i++) {
                            JSONObject c = apps.getJSONObject(i);
                            AppData tempApp = new AppData();

                            tempApp.setName(c.getString(TAG_NAME));
                            // tempApp.setPackageName(c.getString(TAG_PACKAGE));
                            tempApp.setServerVersion(c.getInt(TAG_VERSION));
                            tempApp.setServerDateVersion(c.getInt(TAG_DVERSION))

...etc. This will make it simpler to handle, but your JSON is invalid, strings should ALL be double quoted, see below

{"success":0,"message":"Required field(s) missing"}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.