Multidimensionaler JSON-Array

  • 4 Antworten
  • Letztes Antwortdatum
Xilent

Xilent

Fortgeschrittenes Mitglied
89
Hallo liebe Community,

ich habe ein kleines Problem mit multidimensionalen Arrays in JSON. Hier der JSON Ausschnitt:

JSON-Request:
Code:
{
   "name": "Track Charts",
   "type": "WEEKLY",
   "periodStart": "2013-09-30T00:00:00.0000000+02:00",
   "periodEnd": "2013-10-06T23:59:59.9999999+02:00",
   "links":    [
            {
         "href": "censored",
         "rel": "self"
      },
            {
         "href": "censored",
         "rel": "curie:catalog"
      },
            {
         "href": "censored",
         "rel": "curie:play"
      },
            {
         "href": "censored",
         "rel": "curie:user"
      },
            {
         "href": "censored",
         "rel": "play:bulk-download"
      }
   ],
   "tracks":    [
            {
         "links":          [
                        {
               "href": "censored",
               "rel": "catalog:track"
            },
                        {
               "href": "censored",
               "rel": "user:favorite-track"
            },
                        {
               "href": "censored",
               "rel": "catalog:artist"
            },
                        {
               "href": "censored",
               "rel": "play:track"
            },
                        {
               "href": "censored",
               "rel": "play:track-sample"
            },
                        {
               "href": "censored",
               "rel": "catalog:album"
            },
                        {
               "href": "censored",
               "rel": "catalog:image-64x64"
            },
                        {
               "href": "censored",
               "rel": "catalog:image-256x256"
            },
                        {
               "href": "censored",
               "rel": "catalog:image-128x128"
            }
         ],
         "name": "Wake Me Up (Radio Edit)",
         "artistName": "Avicii",
         "albumName": "Wake Me Up",
         "lengthInSeconds": 250,
         "genre": "Dance",
         "label": "Universal Music",
         "releaseYear": "2013"
      },........
JSON-Parser:
Code:
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
                    		       try{
                    			
                    			JSONArray  tracksJSON = json.getJSONArray("tracks");
                    			JSONArray  linksJSON = json.getJSONArray("links");
                                Log.d("test","1");
                    		      	       	//Loop the Array
                    		        for(int i=0;i < tracksJSON.length();i++){
                    		        	HashMap<String, String> tracks = new HashMap<String, String>();
                    		        	
                    		             	for(int j=0; j < linksJSON.length();j++){
                    		             		
                    		        		JSONObject e = linksJSON.getJSONObject(j);
                    		        		String rel = e.getString("rel");
                    		        		String link = e.getString("href");
                    		        		Log.d("test", rel);
                    		        		String[] separated = rel.split(":");
                    		        	    tracks.put("link_"+separated[1], link);
                    		        		
                    		        		
                    		        		
                    		        		
                    		        	}

                    		        	JSONObject e = tracksJSON.getJSONObject(i);

                    		        	tracks.put("id",  String.valueOf(i));
                    		        	tracks.put("name", e.getString("name"));
                    		        	tracks.put("artistName", e.getString("artistName"));
                    		        	tracks.put("albumName", e.getString("albumName"));
                    		        	tracks.put("length", e.getString("lengthInSeconds"));
                    		        	tracks.put("genre", e.getString("genre"));
                    		        	tracks.put("label", e.getString("label"));
                    		        	tracks.put("releaseYear", e.getString("releaseYear"));
                    		        	mylist.add(tracks);
                    		        	Log.d("LIST", mylist.toString());
                    			}
                    		       }catch(JSONException e)        {
                    		       	 Log.e("log_tag", "Error parsing data "+e.toString());
                    		       }
Das Problem besteht darin, dass ich nicht an die "links" Daten im Teil von "tracks" komme. Wenn ich meinen JSON Reader auf links einstelle, dann ließt er immer nur den oberen Teil, nicht aber in der "tracks"-Region.
Die originalen JSONs darf ich hier aufgrund des vertraulichen Inhalts nicht veröffentlichen.

Hat jemand Rat für mich?

Vielen Dank im Voraus!

LG xilent
 
Zuletzt bearbeitet:
1. Bitte ein angepasstes wie das original zeigen, denn das Ding oben ist alles andere als valide ;)
2. Den Code den du zum Parsen nimmst bitte auch mal ansatzweise herzeigen

Wenn du sagst hol mir "links", dann kriegt er auch nur "links", aber um dir da genau zu sagen wie du dann auf "tracks" kommst, Code zeigen, ansonsten ist das zu sehr ein ins Blaue gerate ...
 
  • Danke
Reaktionen: Xilent
Stimmt du hast recht ;D .

Hab mal alles hinzugefügt
 
Du kriegst das erste links-Objekt?

Ersetze mal: JSONArray linksJSON = json.getJSONArray("links"); durch:
JSONArray linksJSON = tracksJSON.getJSONArray("links");

Relativ schnell immer noch geraten ;) Aber ich hoffe du verstehst auf was ich rauswill ...

//EDIT: Jetzt seh ichs glaub...
JSONObject e = tracksJSON.getJSONObject(i);
Danach(!) kannst du über e.getJSONArray("links") auf das "links"-Array des entsprechenden Json-Objektes zugreifen
 
  • Danke
Reaktionen: Xilent
Danke, danke, danke :D

Das hat mir echt weitergeholfen. War beinahe am verzweifeln und dann so ein kleiner Denkfehler ...

Naja hier die funktionierende Lösung:
Code:
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
                    		       try{
                    			
                    			JSONArray  tracksJSON = json.getJSONArray("tracks");
                    			HashMap<String, String> tracks = new HashMap<String, String>();
                                Log.d("test","1");
                    		      	       	//Loop the Array
                    		        for(int i=0;i < tracksJSON.length();i++){
                    		        	JSONObject e = tracksJSON.getJSONObject(i);
                    		        	
                    		        	JSONArray  linksJSON = e.getJSONArray("links");
                    		             	for(int j=0; j < linksJSON.length();j++){
                    		             		
                    		        		JSONObject f = linksJSON.getJSONObject(j);
                    		        		String rel = f.getString("rel");
                    		        		String link = f.getString("href");
                    		        		Log.d("test", rel);
                    		        		String[] separated = rel.split(":");
                    		        		//Log.d("test",separated[1]);
                    		        	    tracks.put("link_"+separated[1], link);
                    		        		
                    		        		
                    		        		
                    		        		
                    		        	}

                    		        	

                    		        	tracks.put("id",  String.valueOf(i));
                    		        	tracks.put("name", e.getString("name"));
                    		        	tracks.put("artistName", e.getString("artistName"));
                    		        	tracks.put("albumName", e.getString("albumName"));
                    		        	tracks.put("length", e.getString("lengthInSeconds"));
                    		        	tracks.put("genre", e.getString("genre"));
                    		        	tracks.put("label", e.getString("label"));
                    		        	tracks.put("releaseYear", e.getString("releaseYear"));
                    		        	mylist.add(tracks);
                    		        	Log.d("LIST", mylist.toString());
                    			}
                    		       }catch(JSONException e)        {
                    		       	 Log.e("log_tag", "Error parsing data "+e.toString());
                    		       }
 
Zuletzt bearbeitet:
Zurück
Oben Unten