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

Bibliothèques & Frameworks Discussion :

Service JSON->encode de dojox grid [Dojo]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Points : 31
    Points
    31
    Par défaut Service JSON->encode de dojox grid
    Bonjour ! Encore un problème

    J'extraie des données de ma superbe base MySQL...

    Le résultat est un tableau associatif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultats = $selectSQL->fetchAll(PDO::FETCH_ASSOC);
    Puis j'utilise la classe dojox/grid/compat/tests/support/json.php pour l'encoder en JSON. Cela me sert à alimenter des Store de Grid (et très prochainement j'espère des Stores de Chart).

    Je l'utilise comme suit (dans PHP) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    include_once POSITION.'inclus/js/dojox/grid/compat/tests/support/json.php';
    $json = new Services_JSON();
    $data = $json->encode(array('identifier'=>$identifier,'label'=>$label, 'items'=>$resultats));
    Le problème que j'ai, c'est la façon dont il me renvoie les valeurs numériques : il les met entre guillemets, cela est donc traité comme du texte, et par exemple les tris ne sont pas bons dans une Grid (dans l'ordre, ça donne : 13, 2, 205, 4, ...)

    Exemple de la chaîne retournée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    {"identifier":"item_ean",
    	"label":"Liste valoris\u00e9e des articles achet\u00e9s",
    	"items":[{"item_ean":"3179732324818","item_nom":"Eau de perrier Bleue","prixmoyen":"1.3000","datedernierachat":"2009-09-08","nbachetes":"1","totalachat":"1.30"},
    	{"item_ean":"3487400000392","item_nom":"Bl\u00e9 dur pr\u00e9cuit Ebly","prixmoyen":"2.5000","datedernierachat":"2009-09-10","nbachetes":"1","totalachat":"2.50"},
    	{"item_ean":"3564700005835","item_nom":"Lait demi-\u00e9cr\u00e9m\u00e9 D\u00e9lisse","prixmoyen":"4.67","datedernierachat":"2009-09-12","nbachetes":"6","totalachat":"4.02"},
    	{"item_ean":"356470001835","item_nom":"Lait demi-\u00e9cr\u00e9m\u00e9 D\u00e9lisse","prixmoyen":"200.67","datedernierachat":"2009-09-12","nbachetes":"200","totalachat":"25.02"},
    Si j'écris, pour tester, moi même la chaîne en enlevant toutes les guillemets autour des chiffres, les données sont bien transmises en format numérique à la Grid, et les tris fonctionnent !

    Savez-vous comment utiliser ce service_JSON, pour qu'il encode les numériques sans guillemets ? Dois-je m'orienter vers une autre solution ?

    Merci beaucoup pour votre aide.
    Laurent

  2. #2
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Pourquoi n'utilises tu pas json_encode($val); ?

    ERE
    Quand une tête pense seule, elle devient folle.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Hello,

    En fait, json_encode me donne le même résultat, soit des valeurs numériques entre guillemets.

    Pourtant la doc PHP dit bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
    echo json_encode($arr);
     
    L'exemple ci-dessus va afficher :
    {"a":1,"b":2,"c":3,"d":4,"e":5}
    C'est donc mon array de départ qui peut avoir déjà des guillements sur mes valeurs numériques. Mais il s'agit d'une interrogation sur une base MySQL (j'ai vérifié les champs dans les tables, ils sont bien Mediumint), qui est renvoyée avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultats = $selectSQL->fetchAll(PDO::FETCH_ASSOC);
    Si je fais un print_r de $resultats, j'obtiens par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [0] => Array ( [item_ean] => 3179732324818 [item_nom] => Eau de perrier Bleue [prixmoyen] => 2000.918000 [datedernierachat] => 2009-09-08 [nbachetes] => 15 [totalachat] => 20013.58 ) [1] => Array ( [item_ean] => 3428271940028 [item_nom] => Lait demi-écrémé Lactel [prixmoyen] => 0.480769 [datedernierachat] => 2009-08-05 [nbachetes] => 61 [totalachat] => 28.71 ) [2] => Array ( [item_ean] => 3487400000392 [item_nom] => Blé dur précuit Ebly [prixmoyen] => 2.030000 [datedernierachat] => 2009-09-10 [nbachetes] => 3 [totalachat] => 5.62 ) [3] => Array ( [item_ean] => 3564700005835 [item_nom] => Lait demi-écrémé Délisse [prixmoyen] => 0.670000 [datedernierachat] => 2009-09-12 [nbachetes] => 6 [totalachat] => 4.02 ) [4] => Array ( [item_ean] => 5410673052001 [item_nom] => [prixmoyen] => 3.133333 [datedernierachat] => 2009-08-05 [nbachetes] => 4 [totalachat] => 13.00 ) )
    Si je charge ce JSON dans le Store d'une Grid, un tri sur nbacheté me donne : 15, 3, 4, 6, 61

    J'suis largué

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par Loloperso Voir le message
    C'est donc mon array de départ qui peut avoir déjà des guillements sur mes valeurs numériques. Mais il s'agit d'une interrogation sur une base MySQL (j'ai vérifié les champs dans les tables, ils sont bien Mediumint), qui est renvoyée avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultats = $selectSQL->fetchAll(PDO::FETCH_ASSOC);
    Je confirme : j'ai fait un var_dump sur mes champs "numériques" et j'obtiens string(2) "61" par exemple.

    Ce n'est donc pas lié à l'encodeur JSON car les valeurs qui lui sont fournies sont bien des string...

    Ce n'est donc pas lié à Dojo non plus.

    Ca doit être lié à PDO : si je fais un SELECT * from table. Toutes les valeurs sont de type string. J'ai ouvert une discussion dans MySQL/Requêtes... et l'ai refermé immédiatement car je n'y croyais pas... Donc je sais plus quoi faire.

    Je mets le tag 'résolu' et si un modérateur veut supprimer cette discussion, pas de problème Si quelqu'un a une idée malgré tout, je suis preneur bien sûr, parce que là, je fatigue un peu.

  5. #5
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Re,

    J'ai un peu cherché et effectivement c'est un comportement du driver MySQL.

    Note that PDO::ATTR_STRINGIFY_FETCHES will NOT work for the MySQL driver. MySQL will always return strings because that is the behaviour of the core mysql PHP extension. See http://bugs.php.net/bug.php?id=44341
    Or il semblait que le souci avait été réglé, mais en ajoutant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dbh->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false);
    de mon côté ce n'est pas très concluant ...

    ERE
    Quand une tête pense seule, elle devient folle.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    C'est sympa d'avoir cherché avec moi

    Au moins je peux arrêter de chercher maintenant qu'un pro m'a confirmé ça.

    J'ai l'impression que les nombres au format string lors du fetch conviennent à la plupart des cas (par exemple pour les additions, ça fonctionne bien : je ne m'étais jamais posé la question avant, donc ce formatage est acceptable).

    Pour mon problème d'alimenter un Store (qui a besoin de nombres VRAIMENT numériques), j'imagine que je vais devoir écrire une fonction qui parcourra le tableau et qui transformera chaque chaine en numérique (genre float() ) et si le résultat est numérique, alors je remplacerai la valeur par un numérique.... un truc du genre.

    Bref, je pense que je vais faire ça après... parce que là, je me penche sur le OnRowDblClick.... si tu vois ce que je veux dire : révise parce que j'ai toujours des questions bizarres néanmoins j'ai vu çahttp://www.developpez.net/forums/d78...grid-datagrid/ et donc pour l'instant j'essaye de mon côté !

    Merci encore
    Laurent

  7. #7
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Re,

    Pour mon problème d'alimenter un Store (qui a besoin de nombres VRAIMENT numériques), j'imagine que je vais devoir écrire une fonction qui parcourra le tableau et qui transformera chaque chaine en numérique (genre float() ) et si le résultat est numérique, alors je remplacerai la valeur par un numérique.... un truc du genre.
    C'est effectivement plus simple de le faire en PHP. Pour info, Dojo accepte aussi qu'on fournisse dans la structure JSON le type de donnée associée (il faut alors lui donner une fonction de conversion); par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    { name:['Nelson Mandela'], born:[{_type:'Date', _value:'July 18, 1918'}] }
    ...
    ERE
    Quand une tête pense seule, elle devient folle.

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

Discussions similaires

  1. [Dojo] Ajout une liste déroulante dans un Dojox.Grid
    Par moukit233 dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 28/07/2009, 15h54
  2. Json encode / decode
    Par Twubi dans le forum C++
    Réponses: 6
    Dernier message: 21/07/2009, 10h26
  3. [Dojo] dojox.grid.DataGrid : prise de tete
    Par linotte91 dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 19/06/2009, 15h22
  4. Dojox Grid Struts
    Par Freeman84 dans le forum Struts 1
    Réponses: 0
    Dernier message: 01/10/2008, 17h47
  5. Web Service RPC/Encoded (IsNullable Attribute)
    Par AKANDOUCH dans le forum Services Web
    Réponses: 1
    Dernier message: 04/01/2007, 01h34

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