Bonjour,

Je voudrais filtrer un objet Json pour utiliser que certaines valeurs, mais je ne trouve pas la solution.

L'objet filtré sera intégrer dans la librairie Morris.js pour former un tableau de statistique. Si cet objet n'est pas filtré, il sera invalide et donc Morris.js n'affichera rien.

Page dev.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
// ENVOIE DES DONNÉES DU FORMULAIRE EN AJAX
var statform = function (options) {
    $.ajax({
        type: 'GET', 
        url: options.url,
        data: {
            sIdGroupe: options.sIdGroupe,
            sIdClient: options.sIdClient,
            dDateDebut: options.dDateDebut,
            dDateFin: options.dDateFin
        },
        async: false,
        global: false,
        success: function (data) { 
            var obj = $.parseJSON(data);
            for (var i in obj) {
                objSub = obj[i];
                for (var key in objSub) {
                    console.log(objSub[key]); 
                }
            }
            return obj;
        }
    });
};


Dans succes, j'ai fais une boucle for pour récupérer uniquement les valeurs que je veux dans le json, et je veux retourner ces valeurs. Le problème, c'est que le Json qui est retourné ne prend pas en compte ma boucle, et il est retourné en entier, sans aucun filtrage.



Voici à quoi il ressemble :

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
{
    "val": 1,
    "val2": [
        {
            "valS1": "text",
            "valS2": 1,
            "valS3": 2
        },
        {
            "valS1": "text",
            "valS2": 1,
            "valS3": 2
        },
        {
            "valS1": "text",
            "valS2": 1,
            "valS3": 2
        }
    ]
}
Ma boucle a été fait pour retourner ce résultat :

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
[
        {
            "valS1": "text",
            "valS2": 1,
            "valS3": 2
        },
        {
            "valS1": "text",
            "valS2": 1,
            "valS3": 2
        },
        {
            "valS1": "text",
            "valS2": 1,
            "valS3": 2
        }
]

Mais la réponses en Json dans Firebug me retourne les données en entier et ne prend pas en compte mon filtrage qui a été fait avec la boucle.


Page index.vbhtml, le script Morris.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
     $("#reqDate").submit(updateStat);
 
        function updateStat(event) {
            event.preventDefault();
 
            new Morris.Line({
                element: statgraph,
                data: statform({
                    url: urlFonction,
                    sIdGroupe: groupeCh,
                    sIdClient: clientCh,
                    dDateDebut: formatDateFr(dateInputStart.val()),
                    dDateFin: formatDateFr(dateInputEnd.val())
                }),
                xkey: 'date',
                ykeys: ['key', 'val'],
                labels: ['key', 'val']
            });
        }
Merci.


EDIT :
J'ai finalement trouvé une solution !

Quand je reçois le résultat Json en chaîne de caractère, je lui fais un subString pour supprimer le superflu, ensuite je stock le résultat dans une Div HTML, et dans mon graphique, j'appelle la valeur HTML de ce div, et je le parse pour le transformer la chaîne en Objet.