我试图从Web服务中读取一些JSON数据并在Toast中显示它。 这是我试图阅读的JSON数组:
{"ProximoPartido":[{"rival":"Nacional","cancha":"Stockolmo","hora":"21.15","fecha":"Viernes 30","estado":"Pendiente"}]}
这是我写的代码:
private class ReadJSONFeedTask extends AsyncTask
<String, Void, String> {
protected String doInBackground(String... urls) {
return readJSONFeed(urls[0]);
}
protected void onPostExecute(String result) {
try {
JSONObject jsonObject = new JSONObject(result);
JSONObject ProximosPartidos =
new JSONObject(jsonObject.getString("ProximoPartido"));
Toast.makeText(getBaseContext(),
ProximosPartidos.getString("rival") +
" - " + ProximosPartidos.getString("fecha"),
Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Log.d("ReadJSONFeedTask", e.getLocalizedMessage());
}
}
}
这是我得到的错误:
价值[{&#34; hora&#34;:&#34; 21.15&#34;,&#34; estado&#34;:&#34; Pendiente&#34;,&#34; fecha&#34 ;:&#34; Viernes 30&#34;,&#34;竞争对手&#34;:&#34; Nacional&#34;,&#34; cancha&#34;:&#34; Stockolmo&#34;}]类型org.json.JSONArray无法转换为JSONObject
知道我做错了什么吗? 谢谢!
答案 0 :(得分:0)
更改
JSONObject jsonObject = new JSONObject(result);
JSONObject ProximosPartidos = new JSONObject(jsonObject.getString("ProximoPartido"));
Toast.makeText(getBaseContext(),ProximosPartidos.getString("rival") +
" - " + ProximosPartidos.getString("fecha"),Toast.LENGTH_SHORT).show();
到
JSONObject jsonObject = new JSONObject(result);
JSONArray data = jsonObject.getJSONArray("ProximoPartido");
JSONObject ProximosPartidos =data.getJSONObject(0);
Toast.makeText(getBaseContext(),ProximosPartidos.getString("rival") +
" - " + ProximosPartidos.getString("fecha"),Toast.LENGTH_SHORT).show();
结果的值为JsonArray
而不是JSONObject
。
修改强>
使用has检查Json中是否存在密钥。如果此对象具有name的映射,则返回true。
if (ProximosPartidos.has("rival") && ProximosPartidos.has("fecha")) {
Toast.makeText(getBaseContext(),ProximosPartidos.getString("rival") +
" - " + ProximosPartidos.getString("fecha"),Toast.LENGTH_SHORT).show();
}
答案 1 :(得分:0)
你的JSONObject实际上是一个JSONArray,因为它以`[]``
开头只需解析它:
JSONObject jsonObject = new JSONObject(result);
JSONObject ProximosPartidos =
new JSONObject(jsonObject.getJSONArray("ProximoPartido").getJSONObject(0));
然后其余的应该工作