我的 json 在解析时显示为 HTML (android)

My json is appearing as a HTML when parsed (android)

我正在尝试使用 JSON 格式解析 URL 并从中获取值。在浏览器中使用URLJSON的格式如下所示:

{"CompanyID":"1","Message":"Not active user","Success":"false","UserID":"2"}

我的JsonParser代码如下:

import android.util.Log;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

/**
* Created by Fathi on 6/16/2015.
*/
public class JsonParser {
final String TAG = "JsonParser.java";

static InputStream is = null;
static JSONObject jObj = null;
static JSONArray jArray = null;
static String result = "";

public JSONArray getJSONFromUrl(String url) {

    // make HTTP request
    try {

        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet httpget = new HttpGet(url);

        HttpResponse httpResponse = httpClient.execute(httpget);
        StatusLine statusLine = httpResponse.getStatusLine();
        int statusCode = statusLine.getStatusCode();
        Log.e(TAG, "JSON status code:  " + statusCode);

        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, "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();
        Log.e(TAG, "JSON string:  " + result);

    } catch (Exception e) {
        Log.e(TAG, "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {           
        jArray = new JSONArray(result);

    } catch (JSONException e) {
        Log.e(TAG, "Error parsing data " + e.toString());
    }

    // return JSON String
    return jArray;
}

}

我在 activity 中使用的代码如下:

    public class AsyncTaskParseJson extends AsyncTask<String, String, String> {

    final String TAG = "AsyncTaskParseJson.java";

    // set your json string url here
    String yourJsonStringUrl = "**MY URL COMES HERE**";

    // contacts JSONArray
    JSONArray dataJsonArr = null;

    @Override
    protected void onPreExecute() {}

    @Override
    protected String doInBackground(String... arg0) {



        try {

            // instantiate our json parser
            JsonParser jParser = new JsonParser();

            // get json string from url

            JSONArray jsonArray = jParser.getJSONFromUrl(yourJsonStringUrl);


            // loop through all users
            for (int i = 0; i < jsonArray.length(); i++) {

                JSONObject c = jsonArray.getJSONObject(i);

                // Storing each json item in variable
                String Success = c.getString("Success");


                // show the values in our logcat
                Log.e(TAG, "Success: " + Success);


            } } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(String strFromDoInBg) {}

我的 Logcat 出现以下错误(我有 HTTP 响应和字符串):

06-16 03:50:10.841    2470-2489/iss.voltappinterface E/JsonParser.java﹕ JSON     status code:  200
06-16 03:50:10.911    2470-2489/iss.voltappinterface E/JsonParser.java﹕ JSON string:  <html><head><title>Object moved</title></head><body>n<h2>Object moved to <a href="/voln
06-16 03:50:10.921    2470-2489/iss.voltappinterface E/JsonParser.java﹕ Error parsing data org.json.JSONException: Value <html><head><title>Object of type java.lang.String cannot be converted to JSONObject

我可以看到我的 JSON 由于某种原因被处理为 HTML,这是我不明白的,因为它在浏览器中看起来很完美。任何帮助将不胜感激。

看看你端点上的content-typeheader,应该是text/html应该是application/json

Edit :正如@Fathi Eid 建议的那样,您可以强制 Content-type:

httpget.setHeader("Content-Type", "application/json");
httpget.setHeader("Accept", "application/json");

请注意,这是一个修复,您真的应该考虑更改 api 服务器上的响应内容类型,而不是客户端。