Search code examples
androidjsonexception

org.json.JSONException: Expected literal value at character 550 of


I am trying to read JSON file from asset folder. But I get the following exception:

org.json.JSONException: Expected literal value at character 550

I searched lot of stuff but didn't find anything relevant. Here is my JSON file:

{
"resultCount": 3,
"SearchedTerm": "Wada Pav",
"results": [
{
  "locationname": "Mahableshwar Hotel",
  "locationid": "12345",
  "locationaddress" : "baner, Pune",
  "dishrating": "4",
  "dishname": "Wada Pav",
  "dishid": "234",
  "dishcategory": "Snacks",
  "dishnotes": "Spicy Wada Pav",
  "dishpreviewurl":"http://xxx.yyy.zzz/mahableshwar/1.jpg",
  "dishtotalvotes": "9999",
  "friendslistvoted": {
            "friendscount": "3",
            "names": ["Santosh","Sandip","Arvind"],
          }
  "dishimageurl": "http://xxx.yyy.zzz/mahableshwar/2.jpg",
  "mylastrating": "4"
 } 
]
}

I find JSON object on 550 is "names": ["Santosh","Sandip","Arvind"],. I am trying to solve it but don't know what happens in my code. Here is my code:

try {

        input = assetManager.open("dishum-sample-search-results-json.txt");
        int size = input.available();
        byte[] buffer = new byte[size];
        input.read(buffer);
        input.close();
        
        // byte buffer into a string
        String text = new String(buffer);
        try{
        JSONObject jsonObject = new JSONObject(text);
         
        JSONObject searchedTerm = jsonObject.getJSONObject(TAG_SEARCHEDTERM);           
        JSONArray results = searchedTerm.getJSONArray(TAG_RESULTS);         
        for(int i=0; i<results.length(); i++)
        {
            JSONObject dishResult = results.getJSONObject(i);
            String locationName = dishResult.getString(TAG_lOCATIONNAME);
            int locationId = dishResult.getInt(TAG_LOCATIONID);
            String locationAddress = dishResult.getString(TAG_LOCATIONADDRESS);
            String dishNotes = dishResult.getString(TAG_DISHNOTES);
            int dishRating = dishResult.getInt(TAG_DISHRATING);
            JSONObject friendListVoted = dishResult.getJSONObject(TAG_FRIENDLISTVOTED);
            int friendCount = friendListVoted.getInt(TAG_FRIENDCOUNT);
            map.put(TAG_lOCATIONNAME, locationName);
            map.put(TAG_LOCATIONID, String.valueOf(locationId));
            map.put(TAG_LOCATIONADDRESS, locationAddress);
            map.put(TAG_DISHNOTES, dishNotes);
            map.put(TAG_DISHRATING, String.valueOf(dishRating));
            map.put(TAG_FRIENDCOUNT, String.valueOf(friendCount));              
            // adding HashList to ArrayList
            songsList.add(map); 
        }
        }
        catch(JSONException e)
        {
            Toast.makeText(this, "Error in parsing json file"+e, Toast.LENGTH_LONG).show();
        }

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

I also debug my code but when control goes on JSONObject jsonObject = new JSONObject(text); it throw exception and goes in first catch block. How can I solve this problem?


Solution

  • your JSON is invalid.
    your JSON should look like this

    {
        "resultCount": 3,
        "SearchedTerm": "Wada Pav",
        "results": [
            {
                "locationname": "Mahableshwar Hotel",
                "locationid": "12345",
                "locationaddress": "baner, Pune",
                "dishrating": "4",
                "dishname": "Wada Pav",
                "dishid": "234",
                "dishcategory": "Snacks",
                "dishnotes": "Spicy Wada Pav",
                "dishpreviewurl": "http://xxx.yyy.zzz/mahableshwar/1.jpg",
                "dishtotalvotes": "9999",
                "friendslistvoted": {
                    "friendscount": "3",
                    "names": [
                        "Santosh",
                        "Sandip",
                        "Arvind"
                    ]
                },
                "dishimageurl": "http://xxx.yyy.zzz/mahableshwar/2.jpg",
                "mylastrating": "4"
            }
        ]
    }
    

    try using a JSON validator before using it (like JSLint).