user3241191
user3241191

Reputation: 505

Parsing JSON webservice result android

This is part of an AsyncTask that calls a web service that returns a JSON result. As you can see I hard coded the actual JSON return object. This was pulled directly from the error I got that specified it could not create the JSON object from the string object I was passing in, which is the variable result. That error occured when it hit new JSONObject(result) in the ParseResults method. Why would hard coding the exact string work but not the string being passed in?

@Override
         protected void onPostExecute(String result) {

            try {
                result = "{\"Response\":{\"ReturnCode\":200,\"ReturnMessage\":\"Information Successfully Retrieved\",\"ReturnData\":null,\"ReturnClass\":{\"PRO_ID\":\"11111111-1111-1111-1111-111111111111\",\"PRO_FirstName\":\"SILVER\",\"PRO_LastName\":\"HIYO\"},\"FriendlyErrorMessage\":null}}";
                JSONObject jsonObject = new ApiMethods().ParseResult(result);

ParseResults method snippet.

public JSONObject ParseResult(String result) throws JSONException
    {
        JSONObject returnedObject = new JSONObject();
        try
        {
            JSONObject jsonObject = new JSONObject(result);

Also below, as i stated in a comment to another user, is the return statement that is returning the data. This is being returned from a .NET MVC application. I added in the UTF8 when that was mentioned and still get the same error.

return Json(data: new { Response = returnValue }, contentType: "application/json", contentEncoding: System.Text.Encoding.UTF8, behavior: JsonRequestBehavior.AllowGet);

And the entire error message:

org.json.JSONException: Value {"Response":{"ReturnCode":200,"ReturnMessage":"Information Successfully Retrieved","ReturnData":null,"ReturnClass":{"PRO_ID":"11111111-1111-1111-1111-111111111111","PRO_FirstName":"Silver","PRO_LastName":"HIYO"},"FriendlyErrorMessage":null}} of type java.lang.String cannot be converted to JSONObject

Upvotes: 0

Views: 730

Answers (3)

Toris
Toris

Reputation: 2376

type java.lang.String cannot be converted to JSONObject

This means "Use getString() for String"
getJSONObject() may cause this error.

class Response {
    String returnMessage;
    ...
}    

Response response;
response.returnMessage= "msg";

JSONObjct obj;
obj = response.getJSONObject("ReturnMessage"); // cannot be converted

It maybe a encoding problem. Browser (and source editor) may have converted the result string encoding.

Q: ... I am storing items for the JSON data as Strings which is resulting in some odd character appearing A: new String(jo.getString("name").getBytes("ISO-8859-1"), "UTF-8");

Android JSON CharSet UTF-8 problems


Hard coded JSON string is valid. If you want to try, replace (\") with (") and paste it to the checker.

{
    "Response": {
        "ReturnCode": 200,
        "ReturnMessage": "Information Successfully Retrieved",
        "ReturnData": null,
        "ReturnClass": {
            "PRO_ID": "11111111-1111-1111-1111-111111111111",
            "PRO_FirstName": "SILVER",
            "PRO_LastName": "HIYO"
        },
        "FriendlyErrorMessage": null
    }
}

JSON object is like a structure (or class)
It looks like this.

class Response {
    int ReturnCode = 200;
    String ReturnMessage = "Information Successfully Retrieved";
    ...
}

Sample code.

protected void onPostExecute(String result)
{
    JSONObject jsonObject;
    JSONObject response;
    int returnCode;
    String returnMessage;
    //JSONObject returnMessage;

    result = "{\"Response\":{\"ReturnCode\":200,\"ReturnMessage\":\"Information Successfully Retrieved\",\"ReturnData\":null,\"ReturnClass\":{\"PRO_ID\":\"11111111-1111-1111-1111-111111111111\",\"PRO_FirstName\":\"SILVER\",\"PRO_LastName\":\"HIYO\"},\"FriendlyErrorMessage\":null}}";
    try
    {
        jsonObject = new JSONObject(result);
        response = jsonObject.getJSONObject("Response");
        returnCode = response.getInt("ReturnCode");
        returnMessage = response.getString("ReturnMessage");
        //returnMessage = response.getJSONObject("ReturnMessage"); // This may cause same error
    }
    catch (JSONException e)
    {
        e.printStackTrace();
    }
}

Upvotes: 1

Mahesh Deshpande
Mahesh Deshpande

Reputation: 46

Use this site to validate your json string

http://jsonlint.com/

Upvotes: 0

Burak Dede
Burak Dede

Reputation: 3743

Seems like your hardcoded json object is not a valid json object. This may be the reason why it throws exception. Check validitiy of json object here first.

Upvotes: 1

Related Questions