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 :

Json et tableau associatifs


Sujet :

JavaScript

  1. #1
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Points : 1 057
    Points
    1 057
    Par défaut Json et tableau associatifs
    Bonjour tout le monde,

    j'aurais aimer savoir si en json, il était possible d'appliquer un système de clé / valeur sur un tableau, dans ce style là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {montableau: ['c5' => {id: 5, name: 'Bahrein'}]
    Après quelques recherches sur Google, je n'ai rien trouvé ce qui me tend à penser que c'est impossible, mais j'aimerai bien en avoir le coeur net.

    Je vous remercie pour votre aide,
    Cordialement

    Finality

  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 637
    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 637
    Points : 66 662
    Points
    66 662
    Billets dans le blog
    1
    Par défaut
    j'ai pas trop compris le but final ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    montableau= {c5:{id: 5, name: 'Bahrein'}}
    alert(montableau.c5.id)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var montableau=new Array()
    montableau['c5']={id: 5, name: 'Bahrein'}
    alert(montableau.c5.name)
    alert(montableau['c5'].name)
    ??
    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
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Points : 1 057
    Points
    1 057
    Par défaut
    Salut SpaceFrog,

    tout d'abord merci pour ta réponse, et désolé si je me suis mal exprimé. Donc tout d'abord, ce code serait pour un json island.

    En fait j'aimerai créé un tableau en json comprenant plusieurs objets (l'exemple que j'ai donné était mauvais car il n'y avait qu'un seul objet). Voilà ce que j'aimerai faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    {montableau: ['c5' => {id: 5, name: 'Bahrein'},'c6' => {id: 6, name: 'Breme'}]
     
    data = eval(ma_json_island);
    alert(data.montableau['c5'].name);
    J'ai pensé aussi à la première solution que tu as donné : passer par un objet plutot que par un tableau. Le problème est que ma clé (ici c5) provient d'une concaténation de 2 chaînes. Je dois donc utiliser un eval.

    Si l'utilisation de tels tableaux est possible, cela m'évite de passer par le eval (je te l'accorde, le gain de perf sera certainement minime, mais j'ai aussi posé cette question pour apprendre ).

    Encore merci
    Finality

  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 637
    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 637
    Points : 66 662
    Points
    66 662
    Billets dans le blog
    1
    Par défaut
    Je t'avoue ne pas saisir ta contrainte de concaténation ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var montableau=new Array()
    montableau['c'+'5']={id: 5, name: 'Bahrein'}
    montableau['c'+'6']={id: 6, name: 'Breme'}
    alert(montableau['c5'].name)
    ?
    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
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Salut.

    Selon moi, ta question n'a aucun sens (attention, je n'ai pas dit qu'elle n'avait pas d'intérêt ).
    Les tableaux associatifs n'existent pas en JavaScript et à vrai dire, les tableaux indicés ne sont que des Object dotés d'un prototype étendu.
    Donc quelle que soit ta façon de procéder, tu obtiendras toujours un Object.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Points : 1 057
    Points
    1 057
    Par défaut
    En fait ce que tu viens de montrer (dans ton dernier message), c'est exactement ce que je veux obtenir, mais en JSON.

    Bon pour être plus explicite (je sens qu'on a du mal à se comprendre ), voilà le code entier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <div id="json_island">
    <!-- {montableau: ['c5' => {id: 5, name: 'Bahrein'},'c6' => {id: 6, name: 'Breme'}]} -->
    </div>
     
    <script type="text/javascript">
    var island = document.getElementById('json_island').firstChild;
    var the_data = eval('(' + island.data + ')');
    raceways = eval('(' + island.data + ')');
    </script>
    et j'aimerai par la suite faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alert(raceways.montableau['c5'].name);
    mais l'opérateur => semble ne pas exister en JSON. d'où ma question : est-il possible de faire ça ?

    J'espère avoir été clair

    EDIT

    Citation Envoyé par Bovino Voir le message
    Salut.

    Selon moi, ta question n'a aucun sens (attention, je n'ai pas dit qu'elle n'avait pas d'intérêt ).
    Les tableaux associatifs n'existent pas en JavaScript et à vrai dire, les tableaux indicés ne sont que des Object dotés d'un prototype étendu.
    Donc quelle que soit ta façon de procéder, tu obtiendras toujours un Object.
    Ah voilà donc c'est impossible . Je m'en doutais un peu vu le peu de résultats sur Google, ..., mais au moins j'en ai le coeur net

    Merci à vous deux, et désolé si je n'ai pas été clair pour expliquer mon problème

    Finality

  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 637
    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 637
    Points : 66 662
    Points
    66 662
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div id="json_island">
    {c5: {id: 5, name: 'Bahrein'},c6: {id: 6, name: 'Breme'}}</div>
    <script>
    var island = document.getElementById('json_island').innerHTML;
    raceways = eval('(' + island + ')');
    alert(raceways.c5.name)
    </script>
    ???
    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
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Points : 1 057
    Points
    1 057
    Par défaut
    Oui je suis d'accord avec toi SpaceFrog (à défault d'arriver à faire marcher le coup du tableau, j'ai fait exactement ce que tu montres). Mais regardes, j'obtiens l'identifiant de l'objet dont je veux afficher le nom par une chaine, ce qui me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alert(eval("the_data.c" + 5 + ".name"));
    Du coup là je passe par un eval, alors qu'avec les tableaux (si c'était possible), je n'avais pas besoin de l'éval

  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 637
    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 637
    Points : 66 662
    Points
    66 662
    Billets dans le blog
    1
    Par défaut
    ??????
    pas besoin d'eval :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div id="json_island">
    {c5: {id: 5, name: 'Bahrein'},c6: {id: 6, name: 'Breme'}}</div>
    <script>
    var island = document.getElementById('json_island').innerHTML;
    raceways = eval('(' + island + ')');
    alert(raceways['c'+'5'].name)
    </script>
    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

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Pour ma part, j'ai quand même du mal à comprendre l'intérêt de
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div id="json_island">
    <!-- {c5: {id: 5, name: 'Bahrein'},c6: {id: 6, name: 'Breme'}} -->
    </div>
    par rapport à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script type="text/javascript">
    json_island = {c5: {id: 5, name: 'Bahrein'},c6: {id: 6, name: 'Breme'}}
    </script>
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  11. #11
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Points : 1 057
    Points
    1 057
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    ??????
    pas besoin d'eval :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div id="json_island">
    {c5: {id: 5, name: 'Bahrein'},c6: {id: 6, name: 'Breme'}}</div>
    <script>
    var island = document.getElementById('json_island').innerHTML;
    raceways = eval('(' + island + ')');
    alert(raceways['c'+'5'].name)
    </script>
    Ah autant pour moi, je savais pas que tu pouvais accéder à un propriété d'un objet en passant par []. En effet, ma question et mes réponses ont alors plus aucun sens. Je m'en excuse encore...

    Citation Envoyé par Bovino Voir le message
    Pour ma part, j'ai quand même du mal à comprendre l'intérêt de
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div id="json_island">
    <!-- {c5: {id: 5, name: 'Bahrein'},c6: {id: 6, name: 'Breme'}} -->
    </div>
    par rapport à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script type="text/javascript">
    json_island = {c5: {id: 5, name: 'Bahrein'},c6: {id: 6, name: 'Breme'}}
    </script>
    Bah disons que dans la réalité, j'ai plus de 1000 objet json, que j'utilise dans des cas précis. Les stocker dans le html sous forme de commentaires me permet ainsi d'éviter d'alourdir le javascript pour rien

    En tout cas merci à vous deux, j'aurais appris pas mal de choses entre hier et aujourd'hui

  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 637
    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 637
    Points : 66 662
    Points
    66 662
    Billets dans le blog
    1
    Par défaut
    javascript a cet avantage de transversalité en js ou json d'avoir une synytaxe souple

    que ce soit un array un json ou un autre type d'objet on accède au membres ou aux éléments avec

    ou la seconde permettant la concaténation
    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
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Points : 1 057
    Points
    1 057
    Par défaut
    Oki je pensais que la syntaxe était plus stricte. C'est clair que vu comme cela, mes problèmes sont tous résolus

    En tout cas merci encore pour ton aide et tes explications

    Finality

  14. #14
    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 637
    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 637
    Points : 66 662
    Points
    66 662
    Billets dans le blog
    1
    Par défaut
    Nombreux sont ceux qui reprochent à javascript sa lègèreté de syntaxe..
    Moi je l'apprécie pour ça
    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 !

  15. #15
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Points : 1 057
    Points
    1 057
    Par défaut
    Bah on peut trouver du bien et du contre. Mais c'est vrai que parfois c'est bien pratique, et ça fait gagner un temps fou

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Extjs.util.JSON et tableau Associatif
    Par Tiolebucheron dans le forum Ext JS / Sencha
    Réponses: 4
    Dernier message: 18/07/2011, 17h31
  2. tableau associatif en asp ?
    Par bigsister dans le forum ASP
    Réponses: 5
    Dernier message: 26/01/2005, 16h47
  3. asp tableau associatif
    Par rfernandez dans le forum ASP
    Réponses: 6
    Dernier message: 19/12/2003, 18h58
  4. [langage] TRI TABLEAU ASSOCIATIF
    Par proner dans le forum Langage
    Réponses: 5
    Dernier message: 04/03/2003, 16h38
  5. [langage] Réinitialiser un tableau associatif.
    Par totox17 dans le forum Langage
    Réponses: 2
    Dernier message: 28/01/2003, 16h29

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