[英]Error while parsing json data in android
我正在嘗試顯示從json數據源接收的數據。 但是,當我嘗試解析數據時出現錯誤。 我不知道如何解決它。
json數據如下所示:
這是我編寫的用於解析的函數:
public void makeJSONRequest() {
JsonArrayRequest req = new JsonArrayRequest(endpoint_final,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
// UI
swipeRefreshLayout.setRefreshing(false);
for (int i = 0; i < response.length(); i++) {
try {
JSONObject object = response.getJSONObject(i);
JSONObject newsItems = object.getJSONObject("newsItems");
for (int j = 0; j < newsItems.length(); j++) {
titles[j] = newsItems.getString("title");
snips[j] = newsItems.getString("snip");
links[j] = newsItems.getString("link");
}
} catch (JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
Toast.makeText(getActivity(), "JSON Parsing error", Toast.LENGTH_LONG).show();
}
}
mAdapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Error: " + error.getMessage());
Toast.makeText(getContext(), "Error Receiving News", Toast.LENGTH_LONG).show();
}
});
// Adding request to request queue
InitializeVolley.getInstance().addToRequestQueue(req);
}
我得到的錯誤是:
錯誤:org.json.JSONException:值{“ newsItems”:[{“ link”:“ http://www.srmuniv.ac.in/announcement/special-training-details”,“ snip”:“尊敬的學生,對展示位置感興趣的人必須遵循某些准則。您必須清除CDC進行的測試,並且只清除...“,” title“:” CDC:特殊培訓-已更新“}....。
任何幫助將不勝感激。 謝謝!
首先,這個json不是數組,它是一個對象。 您應該使用JsonObjectRequest而不是JsonArrayRequest。 您錯誤地解析了json。
public void makeJSONRequest() {
JsonObjectRequest req = new JsonObjectRequest(endpoint_final,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, response.toString());
// UI
swipeRefreshLayout.setRefreshing(false);
JSONArray newsAr = response.getJsonArray("news");
for (int i = 0; i < newsAr.length(); i++) {
try {
JSONObject newsItem = newsAr.getJSONObject(i);
titles[j] = newsItem.getString("title");
snips[j] = newsItem.getString("snip");
links[j] = newsItem.getString("link");
} catch (JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
Toast.makeText(getActivity(), "JSON Parsing error", Toast.LENGTH_LONG).show();
}
}
mAdapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Error: " + error.getMessage());
Toast.makeText(getContext(), "Error Receiving News", Toast.LENGTH_LONG).show();
}
});
// Adding request to request queue
InitializeVolley.getInstance().addToRequestQueue(req);
}
JSONObject newsItems = object.getJSONObject("newsItems");
用。。。來代替
JSONArray newsItems = object.getJSONArray("newsItems");
JSONObject object =new JSONObject[response];
JSONArray newsItems = object.getJSONArray("newsItems");
for (int j = 0; j < newsItems.length(); j++) {
JsonObject internal=newsItems.getJsonObject(j);
titles[j] = internal.getString("title");
snips[j] = internal.getString("snip");
links[j] = internal.getString("link");
}
使用JSONArray
代替JSONObject
類,因為newsItems
是JsonArray
。
試試這個:
public void makeJSONRequest() {
JsonArrayRequest req = new JsonArrayRequest(endpoint_final,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
// UI
swipeRefreshLayout.setRefreshing(false);
jo = new JSONObject(response);;
JSONArray array = jo.getJSONArray("newsItems");
for (int x = 0; x < array.length(); x++) {
try {
titles[j] = array.getJSONObject(x).optString("title");
snips[j]= array.getJSONObject(x).optString("snip");
links[j] = array.getJSONObject(x).optString("link");
} catch (JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
Toast.makeText(getActivity(), "JSON Parsing error", Toast.LENGTH_LONG).show();
}
}
mAdapter.notifyDataSetChanged();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Error: " + error.getMessage());
Toast.makeText(getContext(), "Error Receiving News", Toast.LENGTH_LONG).show();
}
}
);
// Adding request to request queue
InitializeVolley.getInstance().addToRequestQueue(req);
}
您可以(而且絕對應該)使用庫來代替自己編寫解析函數,該庫可以為您完成繁重的工作。 一個示例是Google的Gson庫,請檢出: https : //github.com/google/gson
像這樣解析:
try {
JSONObject objResponse = new JSONObject(response.toString());
JsonArray arrResponse = objResponse.getJSONArray("newsItems");
for (int i = 0; i < arrResponse.size(); i++) {
JSONObject objItems = arrResponse.get(i);
String link = objItems.getString("link");
}
}catch (Exception e){
e.printStackTrace();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.