获取没有数组名称的JSONArray?

我是新来的JSON和尝试这个教程: http : //p-xr.com/android-tutorial-how-to-parse-read-json-data-into-a-android-listview/#comments

我是JSON,C语言,Java和Android的新手,但我正在学习。 本教程使用我称为命名的数组,但所有将在我的Android项目中使用的JSON将使用没有命名数组的简单表行。 下面是我使用的JSON和本教程中的地震json的示例。

本教程将遍历地震数组,并使用以下代码将其转换为JAVA哈希表列表:

JSONArray earthquakes = json.getJSONArray("earthquakes"); for(int i=0;i<earthquakes.length();i++){ HashMap<String, String> map = new HashMap<String, String>(); JSONObject e = earthquakes.getJSONObject(i); map.put("id", String.valueOf(i)); map.put("name", "Earthquake name:" + e.getString("eqid")); map.put("magnitude", "Magnitude: " + e.getString("magnitude")); mylist.add(map); } 

我的问题是,我如何使用json.getJSONArray("")如果我的JSON只是简单的如下? 我可以转换其余的代码,我只需要知道如何使用getJSONArray("strJsonArrayName")加载该JSON,如果我没有strJsonArrayName

我的JSON(Unnamed数组)

 [ { "cnt":1, "name":"American", "pk":7 }, { "cnt":2, "name":"Celebrities", "pk":3 }, { "cnt":1, "name":"Female", "pk":2 }, { "cnt":1, "name":"Language", "pk":8 }, { "cnt":1, "name":"Male", "pk":1 }, { "cnt":1, "name":"Region", "pk":9 } ] 

教程的JSON(命名数组)

 { "earthquakes":[ { "eqid":"c0001xgp", "magnitude":8.8, "lng":142.369, "src":"us", "datetime":"2011-03-11 04:46:23", "depth":24.4, "lat":38.322 }, { "eqid":"c000905e", "magnitude":8.6, "lng":93.0632, "src":"us", "datetime":"2012-04-11 06:38:37", "depth":22.9, "lat":2.311 }, { "eqid":"2007hear", "magnitude":8.4, "lng":101.3815, "src":"us", "datetime":"2007-09-12 09:10:26", "depth":30, "lat":-4.5172 }, { "eqid":"c00090da", "magnitude":8.2, "lng":92.4522, "src":"us", "datetime":"2012-04-11 08:43:09", "depth":16.4, "lat":0.7731 }, { "eqid":"2007aqbk", "magnitude":8, "lng":156.9567, "src":"us", "datetime":"2007-04-01 18:39:56", "depth":10, "lat":-8.4528 }, { "eqid":"2007hec6", "magnitude":7.8, "lng":100.9638, "src":"us", "datetime":"2007-09-12 21:49:01", "depth":10, "lat":-2.5265 }, { "eqid":"a00043nx", "magnitude":7.7, "lng":100.1139, "src":"us", "datetime":"2010-10-25 12:42:22", "depth":20.6, "lat":-3.4841 }, { "eqid":"2010utc5", "magnitude":7.7, "lng":97.1315, "src":"us", "datetime":"2010-04-06 20:15:02", "depth":31, "lat":2.3602 }, { "eqid":"2009mebz", "magnitude":7.6, "lng":99.9606, "src":"us", "datetime":"2009-09-30 08:16:09", "depth":80, "lat":-0.7889 }, { "eqid":"2009kdb2", "magnitude":7.6, "lng":92.9226, "src":"us", "datetime":"2009-08-10 17:55:39", "depth":33.1, "lat":14.0129 } ] } 

在本教程中,根据@MДΓΓБДLL和@Cody Caughlan的答案,我能够将JSONFunctions.getJSONFromURL重新格式化为JSONArray而不是JSONObject。 这里是我修改的工作代码,谢谢!

 public class JSONfunctions { public static JSONArray getJSONfromURL(String url){ InputStream is = null; String result = ""; JSONArray jArray = null; HttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet(url); HttpResponse response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); is = entity.getContent(); 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(); jArray = new JSONArray(result); return jArray; } } 

你根本不需要调用json.getJSONArray() ,因为你正在使用的JSON已经一个数组了。 所以,不要构造JSONObject的实例; 使用JSONArray 。 这应该足够了:

 // ... JSONArray json = new JSONArray(result); // ... for(int i=0;i<json.length();i++){ HashMap<String, String> map = new HashMap<String, String>(); JSONObject e = json.getJSONObject(i); map.put("id", String.valueOf(i)); map.put("name", "Earthquake name:" + e.getString("eqid")); map.put("magnitude", "Magnitude: " + e.getString("magnitude")); mylist.add(map); } 

您不能使用与本教程中完全相同的方法,因为您要处理的JSON需要在根上parsing为JSONArray ,而不是JSONObject

JSONArray有一个构造函数,它接受一个String源(推测是一个数组)。

所以像这样的东西

 JSONArray array = new JSONArray(yourJSONArrayAsString); 

我假定一个名为JSONArray的是JSONObject,并从服务器访问数据以填充Android GridView。 我的方法是值得的是:

 private String[] fillTable( JSONObject jsonObject ) { String[] dummyData = new String[] {"1", "2", "3", "4", "5", "6", "7","1", "2", "3", "4", "5", "6", "7","1", "2", "3", "4", "5", "6", "7", }; if( jsonObject != null ) { ArrayList<String> data = new ArrayList<String>(); try { // jsonArray looks like { "everything" : [{}, {},] } JSONArray jsonArray = jsonObject.getJSONArray( "everything" ); int number = jsonArray.length(); //How many rows have got from the database? Log.i( Constants.INFORMATION, "Number of ows returned: " + Integer.toString( number ) ); // Array elements look like this //{"success":1,"error":0,"name":"English One","owner":"Tutor","description":"Initial Alert","posted":"2013-08-09 15:35:40"} for( int element = 0; element < number; element++ ) { //visit each element JSONObject jsonObject_local = jsonArray.getJSONObject( element ); // Overkill on the error/success checking Log.e("JSON SUCCESS", Integer.toString( jsonObject_local.getInt(Constants.KEY_SUCCESS) ) ); Log.e("JSON ERROR", Integer.toString( jsonObject_local.getInt(Constants.KEY_ERROR) ) ); if ( jsonObject_local.getInt( Constants.KEY_SUCCESS) == Constants.JSON_SUCCESS ) { String name = jsonObject_local.getString( Constants.KEY_NAME ); data.add( name ); String owner = jsonObject_local.getString( Constants.KEY_OWNER ); data.add( owner ); String description = jsonObject_local.getString( Constants.KEY_DESCRIPTION ); Log.i( "DESCRIPTION", description ); data.add( description ); String date = jsonObject_local.getString( Constants.KEY_DATE ); data.add( date ); } else { for( int i = 0; i < 4; i++ ) { data.add( "ERROR" ); } } } } //JSON object is null catch ( JSONException jsone) { Log.e( "JSON EXCEPTION", jsone.getMessage() ); } dummyData = data.toArray( dummyData ); } return dummyData; 

}

以下是19API的解决scheme:

  • 首先。 制作一个Gson obj。 – > Gson gson = new Gson();

  • 第二步是把你的jsonObj作为string与StringRequest(而不是JsonObjectRequest)

  • 获取JsonArray的最后一步…

YoursObjArray[] yoursObjArray = gson.fromJson(response, YoursObjArray[].class);