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 parse() push() - modification module


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 11
    Points : 8
    Points
    8
    Par défaut JSON parse() push() - modification module
    Yop,

    je bosse sur un module qui récupère des infos sur todoist.com

    je ne suis pas super à l'aise avec javascript :/

    voici le module
    https://github.com/cbrooker/MMM-Todoist
    je l'ai modifié au niveau du fetcher.js pour récupérer plus d'infos (priority, datedue...)
    je concatène mes variables et je push ensuite dans l'affichage - mon problème se situe au niveau du tri (j'aimerais trié par date ou priorité)
    et au niveau de l'affichage (j'aimerais une icone differente par rapport à la Priorité) mais comment gérer ca ? je ne comprends pas comment je pourrais gérer le contenu de ma variable dans MMM-Todoist.js
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    if (JSON.parse(body).items[i].priority == '1') {icontodo ='P1 - '}
    		else if (JSON.parse(body).items[i].priority == '2') {icontodo ='P2 - '}
    		else if (JSON.parse(body).items[i].priority == '3') {icontodo ='P3 - '}
    		else {icontodo ='P4 - '};
     
    if (JSON.parse(body).items[i].due_date_utc) 
    			{
    				date1 = new Date();
    				date2 = new Date(JSON.parse(body).items[i].due_date_utc);
    				diff = dateDiff(date1, date2);
     
    				if(diff.day > 0)
    					{ 
    						dayretour = diff.day + "d ";
    					}
    				else 
    					{
    						dayretour = '';
    					};
    				if(diff.hour > 0)
    					{
     
    						hourretour = diff.hour + "h";
    					}
    				else 
    					{
    						hourretour = '';
    					};
    				if(diff.hour > 0)
    					{
     
    						minretour = diff.min + "min";
    					}
    				else 
    					{
    						minretour = '';
    					};	
     
    				if (!dayretour && !hourretour && !minretour) {datedueretour ='TIME IS UP - ';} 		
    				else {datedueretour += dayretour + hourretour + minretour + " - ";};
    		}
    		else {datedueretour =''};
     
    		contentretour = JSON.parse(body).items[i].content;
     
    		if (JSON.parse(body).items[i].responsible_uid ) {
    		if (JSON.parse(body).items[i].responsible_uid == '102xxxx') {
    		assignedtodoname ='T - '
    		}
     
    		else if (JSON.parse(body).items[i].responsible_uid == '102xxxx') {assignedtodoname ='N - '}
    		else {assignedtodoname ='Inconnu'};
    		} else { assignedtodoname ='' };
     
    		//checkedretour = JSON.parse(body).items[i].checked;
    		onbalance +=assignedtodoname + icontodo + datedueretour + contentretour;
    		items.push(onbalance);
    merci merciiii si vous savez me mettre sur une piste

  2. #2
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    J'avoue que j'ai beaucoup de mal à comprendre ton algo

    mais il y a au moins une chose à faire c'est d'utiliser une variable pour le résultat du parsing
    j'ai compté 10 appels à JSON.parse(body) en clair tu relis et re parse le body 10 fois alors que si tu mets le résultat du parsing dans une variable tu ne le fais qu'1 fois.

    pour le reste j'ai pas compris ce que ça fait.
    A+JYT

  3. #3
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Si j’ai bien compris il y a une boucle for autour de tout ça, que tu ne nous as pas montrée.
    Pour appuyer la suggestion de sekaijin d’utiliser une variable afin d’éviter les appels multiples à JSON.parse, je te suggère une structure comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var jsonBody = JSON.parse(body);
     
    for () { // la boucle for que tu as déjà
      var currentItem = jsonBody.item[i];
      icontodo = "P" + currentItem.priority + " - ";
     
      if (currentItem.due_date_utc) {
        date1 = new Date();
        date2 = new Date(currentItem.due_date_utc);
        …
      }
     
      … etc.
    }
    On ne voit pas non plus la déclaration des variables, en particulier onbalance. J’attire ton attention sur le fait que tu y ajoutes des données à chaque itération, avec l’opérateur +=, sans jamais la réinitialiser. À chaque itération tu te retrouves donc avec les nouvelles données mais aussi les anciennes, ce qui fait une sorte de pyramide, introduisant de la redondance dans ton tableau.

    Un exemple hypothétique pour illustrer mon histoire de pyramide :
    Code exemple : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    itération 0 --> "abc"
    itération 1 --> "abcdef"  (au lieu de "def")
    itération 2 --> "abcdefghi"  (au lieu de "ghi")
    ...

    Cela dit, je te suggère de pusher un objet littéral dans ton tableau, plutôt qu’une chaîne. Pour trier ça sera bien plus pratique (sinon tu devras faire des substring et ça va être super compliqué).

    Fais quelque chose dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      items.push({
        assignedtodoname : assignedtodoname,
        icontodo         : icontodo,
        contentretour    : contentretour,
        datedueretour    : datedueretour
      });
    Ça te permettra d’exploiter la magie de la méthode sort en lui passant une fonction en paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    items.sort(function (itemA, itemB) {
      if (itemA.datedueretour > itemB.datedueretour) return 1;
      if (itemA.datedueretour < itemB.datedueretour) return -1;
      return 0;
    });
    Car oui, les opérateurs de comparaison marchent aussi avec les chaînes. Toutefois tu peux utiliser des types de variables plus pratiques dans tes objets littéraux, par exemple faire en sorte que datedueretour soit de type Date et, dans la fonction passée à sort, utiliser ta fonction dateDiff.

Discussions similaires

  1. Tri par clé lors d'un JSON.parse
    Par legentil dans le forum jQuery
    Réponses: 4
    Dernier message: 11/02/2012, 20h56
  2. JSON Parsing en JSONArray sur android
    Par S.Jihad dans le forum Android
    Réponses: 7
    Dernier message: 08/05/2011, 13h49
  3. Jersey Json parse
    Par allouli_raf dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 20/04/2011, 15h32
  4. JSON parse et stringify
    Par sekaijin dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/11/2009, 15h36
  5. Parsing et modification fichier xml
    Par Premium dans le forum Modules
    Réponses: 2
    Dernier message: 02/12/2008, 15h49

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