Error parsing JSONArray returned from .NET web ser

2019-08-04 18:20发布

I have a web service implemented that returns a JSON String as follows:

 {"checkrecord":[{"rollno":"abc2","percentage":40,"attended":12,"missed":34}],"Table1":[]}

In my Android app I am trying to parse the String to a JSONArray but I am unable to do so because I get the following exception in logcat:

 11-16 22:15:57.381: ERROR/log_tag(462): Error parsing data org.json.JSONException: Value <?xml of type java.lang.String cannot be converted to JSONArray

How to solve this issue?

My Android code is as follows:

public static JSONArray getJSONfromURL(String b)
    {

    //initialize
    InputStream is = null;
    String result = "";
    JSONArray jArray = null;

    //http post
    try{

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(url);
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();

    }catch(Exception e){
        Log.e("log_tag", "Error in http connection "+e.toString());
    }

    //convert response to string
    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();
        result=sb.toString();
    }catch(Exception e)
             {
        Log.e("log_tag", "Error converting result "+e.toString());
     } 

    //try parse the string to a JSON array
    try{
            jArray = new JSONArray(result);
    }
            catch(JSONException e)
             {
        Log.e("log_tag", "Error parsing data "+e.toString());
     }

    return jArray;
       }

This is web service code returning json

     public class Service1 : System.Web.Services.WebService
{
    [WebMethod]

    public String getdata(String rollno)
    {
        String json;
        try
        {

            using (SqlConnection myConnection = new SqlConnection(@"Data Source=\SQLEXPRESS;Initial Catalog=student;User ID=sa;Password=123"))
            {

                string select = "select * from checkrecord where rollno=\'" + rollno + "\'";
                SqlDataAdapter da = new SqlDataAdapter(select, myConnection);
                DataSet ds = new DataSet();
                da.Fill(ds, "checkrecord");
                DataTable dt = new DataTable();
                ds.Tables.Add(dt);
                json = Newtonsoft.Json.JsonConvert.SerializeObject(ds);

            }
        }

        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            return null;

        }

        return json;

    }

3条回答
我只想做你的唯一
2楼-- · 2019-08-04 18:54

Your web service does not return pure JSON, it returns JSON as a string return value from an XML SOAP web service. In fact, it may be an error message in XML since you are not sending a valid SOAP request from the client.

Your URL needs to return raw JSON, with no SOAP XML Envelope around it. Search google for how to write JSON-based web services in ASP.NET, WCF, or another MS technology that may be familiar to you.

Edit

If you want to see the raw result of your URL, try using a tool like Fiddler to monitor the HTTP response.

Also, if you want to make SOAP web service calls from Android, check out ksoap2 for Android

查看更多
叛逆
3楼-- · 2019-08-04 19:08

Try like this

  JSONObject jsonobject = new JSONObject(result);
  JSONArray array = jsonobject.getJSONArray("checkrecord");
      if(array.length()>0){
          int max = array.length();
        for (int i = 0; i < max; i++) {
            JSONObject tmp = array.getJSONObject(i);
            list.add(tmp.getString("rollno"));
            mandatoryFlagList.add(tmp.getString("percentage"));
        }
     }
查看更多
We Are One
4楼-- · 2019-08-04 19:13

Your result initially is not a JSONArray but rather a JSONObject.

Try this:

JSONObject jsonResult = new JSONObject(new String(reader));

JSONArray jArray = jsonResponse.getJSONArray("checkrecord");
查看更多
登录 后发表回答