Obtenir JSONArray sans nom de tableau?

Je suis nouveau sur JSON et j’essaie ce tutoriel: http://p-xr.com/android-tutorial-how-to-parse-read-json-data-into-a-android-listview/#comments

Je suis nouveau sur JSON, les langages C, Java et aussi Android, mais j’apprends. Le tutoriel utilise ce que j’appelle un tableau nommé, mais tout le JSON que je vais utiliser dans mon projet Android utilisera des lignes de tableau simples sans tableau nommé. Des exemples du JSON que j’utilise et du tremblement de terre json du tutoriel sont ci-dessous.

Le tutoriel parcourt le tableau sismique et convertit en une liste de hachage JAVA en utilisant le code suivant:

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

Ma question est, comment puis-je utiliser json.getJSONArray("") si mon JSON est simple comme ci-dessous? Je peux convertir le rest du code, j’ai juste besoin de savoir comment charger ce JSON en utilisant getJSONArray("strJsonArrayName") si je n’ai pas de strJsonArrayName .

Mon JSON (UnNamed Array)

 [ { "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 du tutoriel (tableau nommé)

 { "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 } ] } 

Dans le didacticiel, basé sur les réponses de @MáΓΓΓΓБLL et de @Cody Caughlan, j’ai pu reformater le fichier JSONFunctions.getJSONFromURL en un object JSONArray au lieu d’un object JSONObject. Voici mon code de travail modifié, merci!

 public class JSONfunctions { public static JSONArray getJSONfromURL(Ssortingng url){ InputStream is = null; Ssortingng 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); SsortingngBuilder sb = new SsortingngBuilder(); Ssortingng line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result=sb.toSsortingng(); jArray = new JSONArray(result); return jArray; } } 

Vous n’avez pas besoin d’appeler json.getJSONArray() car le JSON avec lequel vous travaillez est déjà un tableau. Donc, ne construisez pas une instance de JSONObject ; utilisez un JSONArray . Cela devrait suffire:

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

Vous ne pouvez pas utiliser exactement les mêmes méthodes que dans le didacticiel, car le JSON avec lequel vous faites affaire doit être analysé dans un JSONArray à la racine, pas un JSONObject .

JSONArray a un constructeur qui prend une source Ssortingng (supposée être un tableau).

Donc quelque chose comme ça

 JSONArray array = new JSONArray(yourJSONArrayAsSsortingng); 

Je suppose qu’un object JSONArray nommé est un object JSONObject et qu’il a accédé aux données du serveur pour alimenter un GridView Android. Pour ce que ça vaut ma méthode c’est:

 private Ssortingng[] fillTable( JSONObject jsonObject ) { Ssortingng[] dummyData = new Ssortingng[] {"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 data = new ArrayList(); 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.toSsortingng( 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; 

}

Voici une solution sous 19API lvl:

  • Tout d’abord. Faites un obj Gson. -> Gson gson = new Gson();

  • La deuxième étape consiste à obtenir votre jsonObj en tant que chaîne avec SsortingngRequest (au lieu de JsonObjectRequest)

  • La dernière étape pour obtenir JsonArray …

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