0
votes

Indexation via le tableau JSON

J'essaie de vous indexer via une liste JSON en JavaScript, mais j'ai beaucoup de difficulté à le faire fonctionner.

J'ai essayé d'indexer à travers les valeurs de chaque article JSON, mais cela ne suscite pas ce que je veux . Je pense que je peux le faire fonctionner mais ce serait avec un niveau supplémentaire inutile pour la boucle. Voici mon JSON: https://pastebin.com/IYMAA4C5 . Si vous pensez qu'il serait préférable de reformater le JSON, cela pourrait vous aider aussi. xxx

Je souhaite imprimer l'ID, puis le nom, l'enregistrement 1, l'enregistrement 2, semaine et demi_term pour chaque identifiant. Pour le moment, il imprime comme ceci:

ha09_000

{nom: "wyatt feldt", enregistrement_1: "r", inscription_2: "r", semaine: 0, demi_term: 1}

Mais je veux qu'il imprime comme ceci pour chaque single:

ha09_000

Wyatt Feldt

r

r

0

1

Voici un pseudo code pour ce que je voudrais réaliser: xxx

merci.

EDIT: Ceci est la fonction J'utilise pour récupérer les données: xxx


3 Réponses :


0
votes

Vous pouvez nettoyer la boucle interne en regardant chaque clé et en faisant passer la valeur uniquement. De plus, je suggère de tirer le objet.keys (personne) .length code> hors de votre boucle car il traitera quelles sont les clés sur chaque boucle. Si vous les mettez dans une variable et vous référez qu'il évite de réévaluer les touches.

    var groups = Object.keys(testData);
    for(var i = 0; i<groups.length; i++){
        var group = testData[groups[i]];
        for(var j = 0; j<group.length; j++){
            var personEntry = group[j];
            var person_id = Object.keys(personEntry)[0];
            console.log(person_id);
            var personEntries = personEntry[person_id];
            for(var k = 0; k<personEntries.length; k++){
                var personValues = Object.values(personEntries[k]);
                for(var l = 0; l<personValues.length; l++){
                    console.log(personValues[l]);
                }
            }
        }
    }


4 commentaires

Malheureusement, il semble que cela ne fonctionne pas. Il suffit de sortir "ha09_000" puis "0: {nom:" wyatt feldt ", inscription_1:" r ", inscription_2:" r ", semaine: 0, demi_term: 1}" Pour chaque personne.


Je vois que vous avez édité votre message, mais maintenant il imprime "ha09_000" "H" "A" "0" "9".


Je devais le retravailler parce que la structure précédente n'était pas facile à raisonner. Essayez ceci à la place.


Merci mais c'est la façon de le faire, j'ai référencé dans ma question (nécessite une boucle supplémentaire). Je suis sûr qu'il y a un moyen de le faire comme si je décris dans mon pseudo code (c'est-à-dire 3 pour les boucles).



2
votes

Deux idées utiles: (1) Objets : Si cela va être un système réel un jour, et que les données du service représentent des groupes de personnes, le code devrait alors dire cela aussi. À titre d'exemple, j'ai inclus un objet simple personne qui sait se développer à partir d'une représentation plate et sait se rendre sur la console. (2) Le commandement clé n'est pas déterminé dans JS Object. Pour obtenir des valeurs à partir de clés spécifiquement commandées, il faut spécifier la commande. La personne impression () est-ce avec un tableau.

le voir ici, en cours d'exécution sur un sous-ensemble de données ... xxx


3 commentaires

Merci. Cela fonctionne et fait beaucoup de sens. Je viens de faire une petite modification pour le faire fonctionner avec mon fichier JSON localhost et je l'ai également fait une fonction.


J'ai cependant des problèmes. Je ne suis pas habitué à ce formatage et je ne peux pas le faire travailler avec ce que j'essaie réellement de faire. Ce que j'avais vraiment besoin de faire était d'insérer une rangée dans une table pour chaque personne et que chaque rangée contient 6 cellules (groupe de groupe, nom, enregistrement_1, enregistrement_2, semaine, demi_term). Je ne comprends tout simplement pas votre code assez pour que cela fonctionne pour que cela fonctionne. La façon dont je l'ai fait précédemment, c'était comme ça: Pastebin.com/b3gBuinm (j'ai ajouté un résultat attendu). Désolé de demander plus d'aide mais je ne sais tout simplement pas comment faire votre code faire cela.


C'est une belle illustration pourquoi les objets sont bons. J'ai ajouté une méthode permettant à l'objet de la personne qui peut se rendre comme une rangée de table. Je pense que vous verrez de savoir comment obtenir n rangs de N personnes, et il devrait être directement avancé pour envelopper cela avec une balise de table. (Remarque, une méthode statique sur les gens pourrait être un bon endroit pour cela. Notez également que les Displaykeys peuvent devenir une méthode statique à sa propre. Il est utile pour deux méthodes d'instance et sera utile pour une méthode "HeaderArwerrow ()` "Je les laisserai comme un exercice, car je dois être hors ligne pendant environ 12 heures, mais peut fournir de l'aide plus tard)



0
votes

Boucle à travers les propriétés de l'objet à l'aide d'une boucle pour / en boucle.

J'ai ajouté la boucle pour / en boucle de votre code (à l'aide de l'objet Person_info) et avez testé cela et il imprime ce que vous désirez. J'espère que cela aide. P>

function output_json(data) {
    var i, j, k;
    for (i=0; i<Object.keys(data).length; i++) {
        group_=Object.values(data)[i];
        for (j=0; j<Object.keys(group_).length; j++) {
            person=Object.values(group_)[j];
            person_id=Object.keys(person)[0];   
            console.log(person_id);
            for (k=0; k<Object.keys(person).length; k++) {
                person_info=Object.values(person)[k][0];
                //loop through the properties of the person_info object
                //using a for/in loop
                for (var key in person_info) {
                   console.log(person_info[key]); 
                }              
            }
        }
    }
}


0 commentaires