1. #1
    Membre habitué
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2003
    Messages : 322
    Points : 137
    Points
    137

    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
    37 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    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 : 37 243
    Points : 63 363
    Points
    63 363
    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


    réalisations :www.oxygen-translations.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
    Humour

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2003
    Messages : 322
    Points : 137
    Points
    137

    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
    37 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    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 : 37 243
    Points : 63 363
    Points
    63 363
    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


    réalisations :www.oxygen-translations.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
    Humour

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2003
    Messages : 322
    Points : 137
    Points
    137

    Par défaut

    euh, je suis désolé, je n'ai pas compris la réponse ?
    Nom : screen.png
Affichages : 19
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
    37 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    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 : 37 243
    Points : 63 363
    Points
    63 363
    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


    réalisations :www.oxygen-translations.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
    Humour

  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
    37 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    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 : 37 243
    Points : 63 363
    Points
    63 363
    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


    réalisations :www.oxygen-translations.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
    Humour

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2003
    Messages : 322
    Points : 137
    Points
    137

    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 : 17
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
    37 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    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 : 37 243
    Points : 63 363
    Points
    63 363
    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


    réalisations :www.oxygen-translations.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
    Humour

  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
    37 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    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 : 37 243
    Points : 63 363
    Points
    63 363
    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


    réalisations :www.oxygen-translations.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
    Humour

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2003
    Messages : 322
    Points : 137
    Points
    137

    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
    37 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    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 : 37 243
    Points : 63 363
    Points
    63 363
    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


    réalisations :www.oxygen-translations.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
    Humour

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2003
    Messages : 322
    Points : 137
    Points
    137

    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 JavaScript
    Réponses: 2
    Dernier message: 27/01/2007, 11h09
  2. [Tableaux] ajout d'éléments dans un tableau
    Par maysa dans le forum Fonctions
    Réponses: 7
    Dernier message: 06/11/2006, 10h09
  3. ajouter un élément dans une liste
    Par Le Mérovingien dans le forum JavaScript
    Réponses: 22
    Dernier message: 02/07/2006, 17h43
  4. Ajout nouveaux éléments dans liste de choix
    Par Crazyblinkgirl dans le forum JavaScript
    Réponses: 6
    Dernier message: 23/06/2006, 15h17
  5. [Tableaux] ajout d'élément dans un tableau
    Par maximenet dans le forum Fonctions
    Réponses: 3
    Dernier message: 28/02/2006, 20h24

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