从服务器获取JSON后,在Android 2.3中解析JSON失败

从服务器获取JSON后,在Android 2.3中解析JSON失败,android,json,android-version,Android,Json,Android Version,我有一个AsyncTask,它下载JSON字符串并解析JSON: private class GetHttpData extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... params) { String result = null; try { result = makeHttpRequest(

我有一个AsyncTask,它下载JSON字符串并解析JSON:

private class GetHttpData extends AsyncTask<Void, Void, Void> {
    @Override
    protected Void doInBackground(Void... params) {
        String result = null;
        try {
            result = makeHttpRequest(HOST + "/menu_test.php");
            Log.v(TAG, result);
            jsonToDB(result);
        } catch (Exception e) {
            Log.e(TAG, "", e);
        }
        return null;
    }
}
JSONTDB是:

private void jsonToDB(String json) throws JSONException,
        SQLiteException {
    try {
        JSONArray jArray = new JSONArray(json);
        int jLength = jArray.length();
        for (int i = 0; i < jLength; i++) {
            JSONObject category = jArray.getJSONObject(i);
            JSONArray dishes = category.getJSONArray(JSON_CATEGORY_DISHES);
            int dishesLength = dishes.length();
            for (int j = 0; j < dishesLength; j++) {
                JSONObject dish = dishes.getJSONObject(j);
                        Log.v(TAG, dish.getString(JSON_DISH_NUMBER));
            }
        }
    } catch (JSONException e) {
        Log.e(TAG, "Error parsing JSON data" + e.toString());
        throw e;
    }
}
在安卓4.0+中,一切正常,但在2.3中,我有一些奇怪的行为:

08-02 15:24:22.675: V/test(947): ?[{"catnumber":0,"catname":"Japanese","dishes":  [{"number":"39","name":"sushi","content":"rice and fish","price":6.99,"img":"imgurl"}]}]
08-02 15:24:22.675: E/test(947): Error parsing JSON dataorg.json.JSONException: Value ? of type java.lang.String cannot be converted to JSONArray
前面添加了一个我甚至无法复制的符号。如果我从makeHttpRequest()中的第1行删除UTF-8编码,则前面会添加更多jiberish:

08-02 15:27:58.914: V/test(981): [{"catnumber":0,"catname":"Japanese","dishes":[{"number":"39","name":"sushi","content":"rice and fish","price":6.99,"img":"imgurl"}]}]
我可以通过添加以下内容轻松解决此问题:

    while(!json.startsWith("[")) {
        json = json.substring(1);
    }
但仍然:
为什么会这样?我如何解决这个问题?为什么它只发生在android 2.3而不是4+?

首先,我想你没有得到content body.JSONObject/JSONArray的最终数据


您可以尝试
data=entity.getContent().toString()这将不包括任何响应边界,只包括JSON字符串

您是否检查过[]中是否有其他非法字符?可能存在无法从服务器识别的字符集。
08-02 15:27:58.914: V/test(981): [{"catnumber":0,"catname":"Japanese","dishes":[{"number":"39","name":"sushi","content":"rice and fish","price":6.99,"img":"imgurl"}]}]
    while(!json.startsWith("[")) {
        json = json.substring(1);
    }