it-swarm.com.de

JSONArray ohne Arraynamen erhalten?

Ich bin neu bei JSON und versuche dieses Tutorial: http://p-xr.com/Android-tutorial-how-to-parse-read-json-data-into-a-Android-listview/ #Bemerkungen

Ich bin neu in JSON, C-Sprachen, Java und auch Android, lerne aber. In diesem Lernprogramm wird ein benanntes Array verwendet, aber alle in meinem Android-Projekt verwendeten JSON verwenden einfache Tabellenzeilen ohne benanntes Array. Beispiele für die JSON, die ich verwende, und das Erdbeben, die Json aus dem Tutorial verwendet, sind unten aufgeführt.

Das Lernprogramm durchläuft das Erdbebenarray und wird mit folgendem Code in eine Java-Hashmap-Liste konvertiert:

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);            
}

Meine Frage ist, wie kann ich json.getJSONArray("") verwenden, wenn mein JSON wie folgt einfach ist? Ich kann den Rest des Codes konvertieren. Ich muss nur wissen, wie ich diese JSON mit getJSONArray("strJsonArrayName") laden kann, wenn ich keine strJsonArrayName habe.

Mein 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 (benanntes Array) des Lernprogramms

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

In diesem Tutorial konnte ich basierend auf den Antworten von @ M MΓΓ БДLL und @Cody Caughlan die JSONFunctions.getJSONFromURL in ein JSONArray anstelle eines JSONObjects umformatieren. Hier ist mein modifizierter Arbeitscode, danke!

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;
}
}
63
Ricky

Sie müssen json.getJSONArray() überhaupt nicht aufrufen, da die JSON, mit der Sie arbeiten, bereits is ein Array ist. Erstellen Sie also keine Instanz von JSONObject; Verwenden Sie eine JSONArray. Dies sollte ausreichen:

// ...
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);            
}

Sie können nicht genau die gleichen Methoden wie im Tutorial verwenden, da die JSON, mit der Sie sich befassen, in eine JSONArray am Stamm und nicht in eine JSONObject analysiert werden muss.

132
Matt Ball

JSONArray hat einen Konstruktor, der eine String-Quelle verwendet (vermutlich ein Array).

Also so etwas

JSONArray array = new JSONArray(yourJSONArrayAsString);
4
Cody Caughlan

Ich habe angenommen, dass ein benannter JSONArray ein JSONObject ist und auf die Daten vom Server zugegriffen hat, um eine Android-GridView zu füllen. Für was es meine Methode wert ist:

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;

0
G O'Rilla

Hier ist eine Lösung unter 19API Level:

  • Als erstes. Mach ein Gson Obj. -> Gson gson = new Gson();

  • Der zweite Schritt ist das Abrufen Ihres jsonObj als String mit StringRequest (anstelle von JsonObjectRequest).

  • Der letzte Schritt, um JsonArray zu bekommen ...

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

0
Péter Hidvégi