2010-07-25 4 views
0

J'ai une sortie JSON qui ressemble à ceci ..Comment extraire les informations de JSON

{ 
    "XXXX": { 
     "name": "Dalvin Nieger", 
     "work": [ 
     { 
      "department": { 
       "name": "Sales" 
      }, 
      "start_date": "0000-00" 
     } 
     ], 
     "link": "http://www.my-site.com/profile.php?id=XXXXX", 
     "id": "XXXXXX" 
    }, 
    "XXXXXXX": { 
     "name": "Nick Mercer", 
     "work": [ 
     { 
      "department": { 
       "name": "Marketing" 
      }, 
      "start_date": "0000-00", 
      "end_date": "0000-00" 
     } 
     ], 
     "link": "http://www.my-site.com/profile.php?id=XXXXXX", 
     "id": "XXXXXX" 
    } 
} 

XXXX est l'ID pas. de l'employé. Je veux parcourir les données et obtenir le numéro d'identification, le nom, le département dans lequel il travaille et la date de fin pour chaque employé utilisant javascript.

J'apprécie toute aide.

Merci.

+0

Votre JSON est invalide. Vous semblez avoir le corps d'un objet (clé: paires de valeurs) dans le corps d'un tableau. Vous devez corriger cela avant de pouvoir faire quelque chose de sensé avec les données. – Quentin

+2

Qu'en est-il de la downvotation massive, les gens? Ce pourrait être juste une faute de frappe créée en obscurcissant les données privées - allez-y doucement sur le gars. – kander

+0

@david désolé ma mauvaise. Je suppose que je n'ai pas maintenu la touche shift assez longtemps. – Nick

Répondre

6

Votre fichier JSON n'est pas correct: il est enveloppé dans un tableau mais vous n'utilisez pas les clés dans les tableaux JSON. Si vous avez modifié les parenthèses externes ([) en accolades ({), vous pourrez simplement parcourir les clés d'objet JSON en JavaScript. Voir here pour les instructions.

2

Je ne suis pas sûr de comprendre complètement la question, mais est-ce que cela ferait ce que vous voulez, en supposant que vous allez résoudre le problème avec votre JSON comme indiqué?

for(i in jsonData) { 
    console.log("id is " + i); 
    console.log("name is " + jsonData[i].name); 
    console.log("department is " + jsonData[i].work[0].department.name); 
    console.log("enddate is " + jsonData[i].work[0].end_date); 
} 
+0

En fait, c'est 'jsonData [i] .work [0] .department.name', car' work' contient un tableau (redondant). Sinon, +1. – Skilldrick

+1

Merci d'avoir attrapé ça; l'a corrigé dans la réponse. BTW: c'est redondant dans ce jeu de données, mais je peux imaginer quelqu'un ayant deux fonctions après chaque autre - les deux avec des dates de début différentes. – kander

+0

oui vous avez raison. Il convient d'attirer l'attention sur l'une ou l'autre manière, car le code de vue devrait changer pour s'adapter à plusieurs départements s'il est utilisé. – Skilldrick

0

une fois que vous fixer le JSON, il devrait ressembler à ceci et travailler comme ça

var jsonData = { 
 
    "XXXX": { 
 
     "name": "Dalvin Nieger", 
 
     "work": { 
 
      "department": { 
 
       "name": "Sales" 
 
      }, 
 
      "start_date": "0000-00" 
 
     }, 
 
     "link": "http://www.my-site.com/profile.php?id=XXXXX", 
 
     "id": "XXXXXX" 
 
    }, 
 
    "XXXXXXX": { 
 
     "name": "Nick Mercer", 
 
     "work": { 
 
      "department": { 
 
       "name": "Marketing" 
 
      }, 
 
      "start_date": "0000-00", 
 
      "end_date": "0000-00" 
 
     }, 
 
     "link": "http://www.my-site.com/profile.php?id=XXXXXX", 
 
     "id": "XXXXXX" 
 
    } 
 
} 
 
$.each(jsonData,function(id,data){ 
 
    var content = '<p>ID : '+id; 
 
    if(typeof data == 'object') 
 
    $.each(data,function(index,value){ 
 
     
 
    if(typeof value == 'object' && index=='work'){ 
 
     content += '<br/>'+index+' : '+value.department.name; 
 
     }else 
 
     content += '<br/>'+index+' : '+value;  
 
    }); 
 
    content += '</p>'; 
 
    $('#result').append(content); 
 
    
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script> 
 

 
<div id="result"> 
 
    </div>

Questions connexes