IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Ajouter un élément dans un json


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Points : 159
    Points
    159
    Par défaut Ajouter un élément dans un json
    Bonjour,

    J'ai un problème de logique. J'ai un JSON qui est alimenté par une boucle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    var json = {};
    _.each(JSON.parse(res['rows']), function(row) {
      if (!(row.id in catalog)) {
         json[row.sid] = {
            id: row.id,
            name: row.name,
            phones: []
         };
      }
      json[row.id].phones.push({
        mobile: "xxxxx",
        home: "xxxxx",
        work: "xxxxx"
      });
    });
     
    console.dir(json);
    Je voudrai ajouter dans "phones" un item "hardwares" qui serait lui aussi un array avec une liste.
    En gros le json final devrait donner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    "1": {
      "id": 1,
      "name": "lola",
      "phones": [{
        "mobile": "xxx",
        "home": "xxx",
        "work": "xxx",
        "hardwares": [{
          "provider": "samsung",
          "model": "galaxy S5"
        }, {
          "provider": "apple",
          "model": "iphone 6"
        }]
      }]
    }
    Mais je n'y arrive pas. Je n'ai pas eu de soucis pour "phones", mais je n'y arrive plus lorsqu’il faut ajouter imbriquer un array supplémentaire dans l'objet du même id.
    J'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    var json = {};
    _.each(JSON.parse(res['rows']), function(row) {
      if (!(row.id in catalog)) {
         json[row.sid] = {
            id: row.id,
            name: row.name,
            phones: []
         };
      }
      json[row.id].phones.push({
        mobile: "xxxxx",
        home: "xxxxx",
        work: "xxxxx",
        "hardwares": []
      });
      json[row.id].phones[0].hardwares.push({
        provider: row.provider,
        model: row.model,
      });
    });
     
    console.dir(json);
    Mais ça ne marche pas. Il m'ajoute bien les x hardwares dans l'array, mais il me recrée un autre objet dans phones identique sauf que dans le second objet hardwares est vide.
    Donc le premier objet phones est OK, mais le second ne devrait pas exister.

    J'ai vraiment un problème de logique. Si vous avez une solution, je suis preneur.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 634
    Points : 66 650
    Points
    66 650
    Billets dans le blog
    1
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre habitué
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Points : 159
    Points
    159
    Par défaut
    oui j'en suis arrivé au même résultat. Mais si on regarde le résultat, on voit bien que
    json["1"].phones[0].hardwares a 3 objets. Les 2 initiaux + celui ajouté.

    Mais on voit aussi un qu'il existe un json["1"].phones[1] qui lui n'a rien dans hardwares. Cet élément ne devrait pas exister.
    Je me casse la tête à cause de ça.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 634
    Points : 66 650
    Points
    66 650
    Billets dans le blog
    1
    Par défaut
    Ben non c'est dasn les propriété internes du json niveau proto ...
    le contenu c'est juste le début ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre habitué
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Points : 159
    Points
    159
    Par défaut
    euh, je suis désolé, je n'ai pas compris la réponse ?
    Nom : screen.png
Affichages : 2971
Taille : 11,3 Ko

    Ce json en sortie est envoyé à une autre moulinette qui traite le json pour construire une liste plus complète
    qui croise d'autres json. Et ce deuxième objet est traité comme n'importe quel autre élément puisqu'il fait parti
    du json.

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 634
    Points : 66 650
    Points
    66 650
    Billets dans le blog
    1
    Par défaut
    C'est juste l'affichage de console qui te montre au debut le contneu et en dessous les propriété prototypes !

    https://jsfiddle.net/sn6yj99z/1/

    là il ne loggue bein que le premier element avec un seul array hardwares !
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 634
    Points : 66 650
    Points
    66 650
    Billets dans le blog
    1
    Par défaut
    En effet un stringyfy donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"1":{"id":1,"name":"lola","phones":[{"mobile":"xxx","home":"xxx","work":"xxx","hardwares":[{"provider":"samsung","model":"galaxy S5"},{"provider":"apple","model":"iphone 6"},{"provider":"provider","model":"model"}]},{"mobile":"xxxxx","home":"xxxxx","work":"xxxxx","hardwares":[]}]}}
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  8. #8
    Membre habitué
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Points : 159
    Points
    159
    Par défaut
    euh non, moi j'ai toujours 2 éléments "phones" dans la console. Il y a un truc ...
    Si j'applique ça sur un script js exécuté par nodejs, il me renvoi sur la console toujours 2 éléments "phones" au lieu d'un seul.

    Nom : screen2.png
Affichages : 2920
Taille : 8,5 Ko

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 634
    Points : 66 650
    Points
    66 650
    Billets dans le blog
    1
    Par défaut
    le harwares est vide au départ ...
    mais on ne push que dsn le 0 , en pushant dans le 1 on le rajoute ...
    https://jsfiddle.net/sn6yj99z/3/
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 634
    Points : 66 650
    Points
    66 650
    Billets dans le blog
    1
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #11
    Membre habitué
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Points : 159
    Points
    159
    Par défaut
    je suis en core plus perdu qu'avant lol.

    Si je prends l'exemple 3. Avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    json["1"].phones[0]['hardwares'].push({
        provider: "provider",
        model: "model",
      });
      json["1"].phones[1]['hardwares'].push({
        provider: "provider",
        model: "model",
      });
    il me sort:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"1":{"id":1,"name":"lola","phones":[{"mobile":"xxx","home":"xxx","work":"xxx","hardwares":[{"provider":"samsung","model":"galaxy S5"},{"provider":"apple","model":"iphone 6"},{"provider":"provider","model":"model"}]},{"mobile":"xxxxx","home":"xxxxx","work":"xxxxx","hardwares":[{"provider":"provider","model":"model"}]}]}}
    Ce qui est correct. Mais si je mets en commentaire le second push:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    json["1"].phones[0]['hardwares'].push({
        provider: "provider",
        model: "model",
      });
      /*json["1"].phones[1]['hardwares'].push({
        provider: "provider",
        model: "model",
      });*/
    Il me sort:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"1":{"id":1,"name":"lola","phones":[{"mobile":"xxx","home":"xxx","work":"xxx","hardwares":[{"provider":"samsung","model":"galaxy S5"},{"provider":"apple","model":"iphone 6"},{"provider":"provider","model":"model"}]},{"mobile":"xxxxx","home":"xxxxx","work":"xxxxx","hardwares":[]}]}}
    Ce qui n'est pas correct. Il y a un élément en trop. J'ai la tête grosse comme une pastèque. Je vais aller pioncer pour me libérer un peu et je vais me re-pencher sur les exemples pour essayer de comprendre :'(

  12. #12
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 634
    Points : 66 650
    Points
    66 650
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     json[row.id].phones.push({
        mobile: "xxxxx",
        home: "xxxxx",
        work: "xxxxx",
        "hardwares": []
    tu push un array vide ...hardwares ...
    si tu ne push rien ensuite dedans
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  13. #13
    Membre habitué
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Points : 159
    Points
    159
    Par défaut
    Hello,

    Bon après un weekend sans y penser je reviens avec le même prob. Bon je pense plus à un prob de logique qui découle sur mon code foireux.
    J'ai revu tous les fiddle envoyé et en fait j'ia compris que mon problème est un prob à la base de ma source.

    J'ai créé le fiddle suivant: https://jsfiddle.net/wf8ssw4m/5/

    La variable rows est en fait le résultat d'une requête en base de données. En fait le résultat me renvoie bien 3 éléments sont le sid est toujours identique.
    Par contre il existe plusieurs cid. En sortie il faut que j'arrive à avoir, par rapport à cet exemple, que les x lignes dont le ci est différent + les lignes uniques, en concaténant le aid:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    {
        "5": {
            "ref_sid": 5,
            "ci": [
                {
                    "ref_cid": 5,
                    "ref_aid": [{
                        "ref_aid": 2
                      }, {
                        "ref_aid": 1,
                    }]
                },
                {
                    "ref_cid": 6,
                    "ref_aid": [{
                        "ref_aid": 2
                    }]
                }
            ]
        }
    }
    J'espère que j'ai pu mieux m'exprimer.

Discussions similaires

  1. Correction pour ajouté un élément dans une liste
    Par Rifton007 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/01/2007, 12h09
  2. [Tableaux] ajout d'éléments dans un tableau
    Par maysa dans le forum Langage
    Réponses: 7
    Dernier message: 06/11/2006, 11h09
  3. ajouter un élément dans une liste
    Par Le Mérovingien dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 02/07/2006, 18h43
  4. Ajout nouveaux éléments dans liste de choix
    Par Crazyblinkgirl dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/06/2006, 16h17
  5. [Tableaux] ajout d'élément dans un tableau
    Par maximenet dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2006, 21h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo