2013-06-16 22 views
12

analysieren Ich möchte diese JSON Zeilen lesen, sondern weil es mit JSONArray im ein wenig verwirrtwie JSONArray in android

"abridged_cast": [ 
      { 
       "name": "Jeff Bridges", 
       "id": "162655890", 
       "characters": [ 
        "Jack Prescott" 
       ] 
      }, 
      { 
       "name": "Charles Grodin", 
       "id": "162662571", 
       "characters": [ 
        "Fred Wilson" 
       ] 
      }, 
      { 
       "name": "Jessica Lange", 
       "id": "162653068", 
       "characters": [ 
        "Dwan" 
       ] 
      }, 
      { 
       "name": "John Randolph", 
       "id": "162691889", 
       "characters": [ 
        "Capt. Ross" 
       ] 
      }, 
      { 
       "name": "Rene Auberjonois", 
       "id": "162718328", 
       "characters": [ 
        "Bagley" 
       ] 
      } 
     ], 

Ich muss nur benutzen Sie den „Namen“ und speichern Sie alle als ein String beginnen. (der String-Wert wird sein: Jeff Bridges, Charles Grodin, Jessica Lange, John Randolph, Rene Auberjonois).

dies ist mein Code:

try { 
     //JSON is the JSON code above 

     JSONObject jsonResponse = new JSONObject(JSON); 
     JSONArray movies = jsonResponse.getJSONArray("characters"); 
     String hey = movies.toString(); 


    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+0

können Sie die volle JSON-Zeichenfolge posten? –

+0

Sie rufen das Array mit dem falschen Namen ab. –

+0

Sollte 'getJSONArray ("gekürzter_cast") 'und dann for-Schleife sein – vorrtex

Antwort

45

Wenn Sie nach dem ‚Namen‘ sind, warum Ihr Code-Snippet sehen aus wie ein Versuch, die ‚Zeichen‘ zu bekommen?

Wie auch immer, dies unterscheidet sich nicht von anderen Listen- oder Array-ähnlichen Operationen: Sie müssen nur über das Dataset iterieren und die Informationen abrufen, an denen Sie interessiert sind. Das Abrufen aller Namen sollte etwa so aussehen:

List<String> allNames = new ArrayList<String>(); 

JSONArray cast = jsonResponse.getJSONArray("abridged_cast"); 
for (int i=0; i<cast.length(); i++) { 
    JSONObject actor = cast.getJSONObject(i); 
    String name = actor.getString("name"); 
    allNames.add(name); 
} 

(direkt in den Browser eingegeben, also nicht getestet).

+0

ich danke Ihnen hat funktioniert! – digitalmidges

+1

Was ist mit dem JSON dieses Formats [{"id": "1", "user": "alll"}, {"id": "1", "benutzer": "alll"}] – numerah

+5

@numerah: you habe ein Array ohne Schlüssel, also analysiere den JSON direkt in ein 'JSONArray'. –

4

getJSONArray (attrname) erhalten Sie ein Array aus dem Objekt der gegebenen Attributnamen in Ihrem Fall, was passiert ist, dass für

{"abridged_cast":["name": blah...]} 
^ its trying to search for a value "characters" 

, aber Sie müssen in das Array bekommen und dann ein tun Suche nach "Zeichen"

versuchen diese

String json="{'abridged_cast':[{'name':'JeffBridges','id':'162655890','characters':['JackPrescott']},{'name':'CharlesGrodin','id':'162662571','characters':['FredWilson']},{'name':'JessicaLange','id':'162653068','characters':['Dwan']},{'name':'JohnRandolph','id':'162691889','characters':['Capt.Ross']},{'name':'ReneAuberjonois','id':'162718328','characters':['Bagley']}]}"; 

    JSONObject jsonResponse; 
    try { 
     ArrayList<String> temp = new ArrayList<String>(); 
     jsonResponse = new JSONObject(json); 
     JSONArray movies = jsonResponse.getJSONArray("abridged_cast"); 
     for(int i=0;i<movies.length();i++){ 
      JSONObject movie = movies.getJSONObject(i); 
      JSONArray characters = movie.getJSONArray("characters"); 
      for(int j=0;j<characters.length();j++){ 
       temp.add(characters.getString(j)); 
      } 
     } 
     Toast.makeText(this, "Json: "+temp, Toast.LENGTH_LONG).show(); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

geprüft :)

1

Hier ist ein besserer Weg, es zu tun. Hoffe, das hilft

protected void onPostExecute(String result) { 
       Log.v(TAG + " result); 


       if (!result.equals("")) { 

        // Set up variables for API Call 
        ArrayList<String> list = new ArrayList<String>(); 

        try { 
         JSONArray jsonArray = new JSONArray(result); 

         for (int i = 0; i < jsonArray.length(); i++) { 

          list.add(jsonArray.get(i).toString()); 

         }//end for 
        } catch (JSONException e) { 
         Log.e(TAG, "onPostExecute > Try > JSONException => " + e); 
         e.printStackTrace(); 
        } 


        adapter = new ArrayAdapter<String>(ListViewData.this, android.R.layout.simple_list_item_1, android.R.id.text1, list); 
        listView.setAdapter(adapter); 
        listView.setOnItemClickListener(new OnItemClickListener() { 
         @Override 
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

          // ListView Clicked item index 
          int itemPosition = position; 

          // ListView Clicked item value 
          String itemValue = (String) listView.getItemAtPosition(position); 

          // Show Alert 
          Toast.makeText(ListViewData.this, "Position :" + itemPosition + " ListItem : " + itemValue, Toast.LENGTH_LONG).show(); 
         } 
        }); 

        adapter.notifyDataSetChanged(); 
...