2017-01-19 14 views
0

Willkommen, ich habe ein Problem mit der JSON-Datei. Ich würde es gerne durchspielen und jeden Status in eine Reihe bringen, aber ich blieb stecken. Ich lade diese Datei und analysiere sie. Dann habe ich versucht, forEach zu verwenden, aber es hat nicht funktioniert. Danke für die Hilfe!Wie wird JSON mit mehreren Ebenen iteriert?

[{ 
    "offers": [{ 
    "advertiser_api_id": 12, 
    "status": 1 
    }, { 
    "advertiser_api_id": 13, 
    "status": 0 
    }] 
}] 
+0

Haben Sie alle Statuswerte in ein neues Array extrahieren möchten? Bedeutung für das obige Beispiel erhalten Sie '[1, 0]'? – Giladd

+0

Das Formatieren von JSON mit einem Prettifier macht seine Struktur oft klarer; das würde hier helfen – qxz

+0

Wie viele Ebenen müssen Sie iterieren? –

Antwort

0

Diese Schleifen durch das Objekt und druckt die Daten auf die Konsole - Sie haben wahrscheinlich nicht die richtige Array durchlaufen erreichen.

var data = [{ 
    "offers": [{ 
    "advertiser_api_id": 12, 
    "status": 1 
     }, { 
    "advertiser_api_id": 13, 
    "status": 0 
    }] 
}]; 

data[0].offers.forEach(function(element) { 
    console.log(element.status); 
}); 
+0

Sie haben Recht, ich bin in dieser Anordnung nicht tief genug gegangen. Danke, dein Code hat funktioniert :) – Ioo

1

Ich nehme an, dies wird in Javascript sein. Sie können versuchen, die folgenden:

for (x in json[0].offers) { 
    console.log(json[0].offers[x].status); 
} 
+2

Ist nicht das Angebot json in einem Array, also müsste er für x in 'json [0] .offers' machen? –

+0

@PatrickMurphy oh ja, du hast Recht, meine Antwort bearbeitet. – bugscoder

0

wird diese

arbeiten
statuses = [] 
JSON.parse(data)[0].offers.forEach(x => statuses.push(x.status)) 
1

Sie haben eine Reihe von Gegenständen innerhalb Array bekam.

Zuerst müssen Sie die Daten von JSON zu Objekt mit JSON.parse(data); analysieren Dann greifen Sie auf das Objekt offers. Verwenden Sie das Objekt parsedData[0].offers und durchlaufen Sie dann das Array, um den Status zu erhalten.

var data = `[{ 
 
    "offers": [{ 
 
    "advertiser_api_id": 12, 
 
    "status": 1 
 
    }, { 
 
    "advertiser_api_id": 13, 
 
    "status": 0 
 
    }] 
 
}]`; 
 

 
var parsedData = JSON.parse(data); 
 
var result = []; 
 
parsedData[0].offers.forEach((currentValue) => result.push(currentValue["status"])); 
 
console.log(result)

+0

Eigentlich ein Array (von Objekten) _in einem Objekt_ innerhalb eines Arrays – qxz

+0

Ja, das ist korrekt .. – Agalo

1

können Sie map Funktion:

var data = [{ 
 
    "offers": [{ 
 
    "advertiser_api_id": 12, 
 
    "status": 1 
 
    }, { 
 
    "advertiser_api_id": 13, 
 
    "status": 0 
 
    }] 
 
}] 
 

 
var stats = data[0].offers.map(function(item) { 
 
    return item.status; 
 
}) 
 

 
console.log(stats);

0

eine rekursive Ansatz

 var item = [{ 
     "offers": [{ 
     "advertiser_api_id": 12, 
     "status": 1 
     }, { 
     "advertiser_api_id": 13, 
     "status": 0 
     }] 
    }]; 

    var statusArray = []; 
    function getStatusForALlLevels(item){ 
    if(item.offers instanceof Array){ 
    for(var i=0;i<item.offers.length;i++){ 
     getStatusForALlLevels(item.offers[i]); 
     } 
    }else{ 
     statusArray.push(item.status); 
    } 
    } 
    getStatusForALlLevels(item[0]); 
    console.log(statusArray); 
0

Sie könnten einen iterativen und rekursiven Ansatz verwenden, um status aus mehreren verschachtelten Objekten abzurufen.

var data = [{ offers: [{ advertiser_api_id: 12, status: 1 }, { advertiser_api_ii: 13, status: 0 }] }], 
 
    status = data.reduce(function iter(r, o) { 
 
     if ('status' in o) { 
 
      r.push(o.status); 
 
     } 
 
     Object.keys(o).forEach(function (k) { 
 
      if (Array.isArray(o[k])) { 
 
       r = o[k].reduce(iter, r); 
 
      } 
 
     }); 
 
     return r; 
 
    }, []); 
 

 
console.log(status);

Verwandte Themen