从服务器获取JSON后,在Android 2.3中解析JSON失败
我有一个AsyncTask,它下载JSON字符串并解析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(
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);
}