Parser Json en javascript - Javascript/Node.js - Programmation
Marsh Posté le 20-03-2015 à 23:02:26
Salut
dans ta fonction transform, le parametre "data" c'est quoi ? le json (texte) ou un object ?
si tu ne le sais pas, tu peux y rajouter un
console.log (data); // avant le return bien sur
Si il s'agit d'un object, tu n'as donc pas besoin de le parser, et du coup tu peux boucler dedans.
Genre :
Code :
|
etc...
Marsh Posté le 22-03-2015 à 15:03:30
Merci de ton aide voilà où j'en suis.
Code :
|
Code :
|
J'ai transformer mes chaînes String en Float.
Maintenant j'aimerai nettoyer le reste, c'est à dire de virer toutes les catégories similaires en gardant le prix minimal.
Sauf que je fais une erreur en utilisant la méthode math.min() je lis que la dernière valeur de collection et non l'ensemble.
Quelle est mon erreur?
Je pense qu'il faut que j'adapte ce code:
[img][/img]
La dernière méthode pour filtrer ne marche pas. Je ne vois pas pourquoi.
Peux tu m'expliquer data.results[collection].forEach(function(f) ou data.results[collection].filter(function(user) c'est quoi la différence?
Marsh Posté le 22-03-2015 à 20:32:52
Math.max recoit au moins 2 paramètres et renvoit le plus grand.
Donc par exemple :
Math.max (10, 20, 2, 15, 19) renvoit 20
Dans ton cas ca ne te sert pas je pense, tu devrais garder le prix précedent dans une variable, et vérifier que celui que tu tests est plus grand ou pas (si j'ai bien compris ton cheminement). Si oui, tu le gardes et tu remplaces la variable, si non, tu remplaces le champ.
Un truc comme ca :
Code :
|
Du coup, concernant le filter, c'est vrai que c'est potentiellement plus adapté.
forEach ne fait que boucler dans les elements d'ub tableau en appliquant une fonction à chaque element, mais ne renvoit rien.
Alors que filter boucle dans un tableau et en revoit un autre. Selon la valeur de retour de la fonction qui est appliquée à chacun des elements, true on garde et false on garde pas.
Code :
|
Dans ton cas, c'est surement plus approprié je pense
Marsh Posté le 22-03-2015 à 20:47:45
Oui, la fonction filter est idéale mais elle ne marche pas telle qu'elle écrite dans l'exemple4 de la photo.
Code :
|
J'écris ce code mais rien ne se passe. Mais je mets return user.Prix = 179; tous les prix passent à 179, donc çà marche un peu mais le nouveau tableau ne s'affiche pas. C'est la que je ne comprends pas.
Après je suis débutant en code et c'est la première fois que je touche à du javascript. Bon c'est proche du java. Mais j'ai toujours des soucis avec les arguments du style:
Code :
|
Encore merci pour ton aide
Marsh Posté le 22-03-2015 à 21:34:37
La seule chose proche du java avec javascript, c'est le nom. Et un peu de syntaxe à la rigueur.
Concernant le filtrage, tu fais :
var NouveauPrix = f.Prix.substring(1,10);
f.Prix = parseFloat(NouveauPrix);
Déjà, poru faire une substring sur un Number, il faut le caster en String, et ensuite tu le recastes en Number ?
Et le substring (1,10), est-il normal ?
170 devient 70 du coup
Dans JSON, les champs Rang, Quantite et Prix sont déjà des Number, donc à moins de vouloir traiter qqch en particulier, pas besoin de substring et de parseFloat
Essayes déjà ca
Marsh Posté le 22-03-2015 à 21:35:16
Ensuite, le filter semble donner le résultat que tu attends
Marsh Posté le 22-03-2015 à 21:59:28
SICKofitALL a écrit : La seule chose proche du java avec javascript, c'est le nom. Et un peu de syntaxe à la rigueur. Concernant le filtrage, tu fais : Déjà, poru faire une substring sur un Number, il faut le caster en String, et ensuite tu le recastes en Number ? Dans JSON, les champs Rang, Quantite et Prix sont déjà des Number, donc à moins de vouloir traiter qqch en particulier, pas besoin de substring et de parseFloat Essayes déjà ca |
https://www.kimonolabs.com/apis/dh15upmm
Non, les Prix ne sont pas des Number. Et les Quantités et Rang non plus si tu regardes le code avant modification il y a les " ", comme "€170.00"
C'est pour ça que je caste, pour manipuler des Number.
Ce qui m'a guider c'est l'example 4 de la photo que j'ai posté plus haut. Il y a "Points": 329 C'est différent de "329"
SICKofitALL a écrit : Ensuite, le filter semble donner le résultat que tu attends |
Non j'ai tout essayer sans le caste avec le caste je n'y arrive pas.
Voici le JSON AVANT:
https://www.kimonolabs.com/api/dh15 [...] rj8LRpbFIz
Code :
|
Voici le JSON APRES:
https://www.kimonolabs.com/api/dh15 [...] immodify=1
Voici le code avec filter mais je n'y arrive pas
Code :
|
Edit: Il n'y a aucun changement.
Marsh Posté le 22-03-2015 à 22:31:03
Ah oui en effet, j'avais zappé le début du thread.
Et ca, ca donne quoi ?
Code :
|
Marsh Posté le 22-03-2015 à 23:03:42
DSl mais ça donne ça:
{
"error": "Bad Request",
"message": "Your function failed to evaluate."
}
Je ne sais pas vraiment pourquoi mais j'ai essayé ça:
Code :
|
Resultat:
[
{
"Cat": "ALEATOIRE Cat. 9",
"Rang": 4,
"Quantité": 1,
"Prix": 173
}
]
Bon, il y a deux choses la première c'est que je fais sauter le reste c'est à dire le début:
Code :
|
Puis je n'ai pas le minimum de mon prix pour chaque catégorie.
Je galère trop.
Marsh Posté le 22-03-2015 à 23:31:53
Failed to evaluate ?
Je ne sais pas comment il integre le code, mais il est possible que les guillements dans le replace foutent la merde
remplace les
replace (/[^\d]/, ''));
par des
replace (/[^\d]/, "" ));
Concernant ton code, filter renvoit qqch, mais ne modifie pas le array "inline".
Marsh Posté le 22-03-2015 à 23:47:43
Bon merci de prendre du temps pour mon problème.
Je t'explique ce que je veux faire.
Le fichier Json est crée à partir de données d'un site, c'est l'api kimonolabs qui le la créee. Pourquoi j'utilise ce truc? Tout simplement comme tu peux le voir niveau code je suis débutant. On m'avait donné la procédure à suivre c'était:
curl pour choper la page
parser la page
xml pour le stockage.
Sauf que j'ai trouvé kimonolabs qui je pense s'avère plus simple.
Là ou c'est compliquer c'est que les données que tu vois dans le json son fixe dans le temps. Une fois qu' "On" (j'espère que tu va m'aider ) aura nettoyer le code il nous restera donc ces fichus catégories avec leur prix mini pour un temps fixé.
Mais, j'ai configurer l'API pour que les données se refresh toutes le heures donc le json va être actualisé avec de nouveaux prix. Derrière notre code de nettoyage opère.
Alors pour le problème dans le temps ben je sais pas trop comment je vais faire mais j'imagine que on peut stocker chaque json et dater les données.
Le but final c'est de tracer un petit graphique des prix de chaque catégorie en fonction du temps en local (Excel ou autre)/ cloud mais le plus SIMPLE des deux.
Voilà. Tu penses que c'est jouable?
Ou je devrais faire autrement?
Merci
Marsh Posté le 22-03-2015 à 23:53:09
SICKofitALL a écrit : Failed to evaluate ? |
pareil, mais les "" et '' c'est vu de la même façon. J'ai tout testé j'y ai passé la journée ça me soule^^
Marsh Posté le 20-03-2015 à 18:54:55
Bonjour,
voici mon fichier:
https://www.kimonolabs.com/api/dh15 [...] rj8LRpbFIz
Comme vous pouvez le voir il y a plusieurs fois categorie9, plusieurs foirs catégorie8, plusieurs fois 407..
L'idée c'est de nettoyer le fichier json pour garder qu'un seule fois une catégorie de chaque avec comme condition le prix minimal.
Pour sa je peux parser le fichier json et écrire un script direcement à la source sur programme qui me génère le fichier json.
En fait comme je ne sais pas vraiment coder j'ai utilisé kimonolabs qui me permet de récupérer des données d'un site web puis de d'écrire dans un fichier json.
[img][/img]
Voila peut on m'aider svp à nettoyer les données. J'ai regardé sur google mais parser json javascript il des trucs mais je suis pas vraiment à l'aise avec.
Merci