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

AJAX Discussion :

Générer un fichier CSV à partir d'un objet JSON


Sujet :

AJAX

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut Générer un fichier CSV à partir d'un objet JSON
    Bonjour,

    Tout est dans le titre, j'aimerais pouvoir générer un fichier CSV à partir de l'objet JSON reçu par ma requête Ajax :

    Code html : 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
    <!DOCTYPE html>
    <meta charset="utf-8"/>
    <html>
    	<head>
    		<title>This is Website Title</title>
    		<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js" type="text/javascript"></script>
    		<script>
                            var formId = 520226
                            // Définition des paramètres de la requête HTTP
                            var settings = {
                                    "async": true,
                                    "crossDomain": true,
                                    "url": "https://www.kizeoforms.com/rest/v3/forms/"+formId,
                                    "method": "GET",
                                    "headers": {
                                            "content-type": "application/json",
                                            "Authorization": "********",
                                    }
                            }
     
                            // Envoi de la requête et affichage en console de la réponse
                            $.ajax(settings).done(function (response) {
                                    console.log(response);
                            });
                    </script>
    	</head>
    </html>

    Merci

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    il serait intéressant que tu nous mettes un extrait de l'objet JSON que tu reçois !

    PS : rien à voir avec Ajax

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    Nom : json.png
Affichages : 737
Taille : 68,8 Ko

    Voilà le JSON que je reçois, c'est assez conséquent, j'aimerais sélectionner les données qui m'intéresse, et ensuite les envoyer dans un fichier CSV,

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Je présume qu'il s'agit de l'objet fields que tu souhaites traiter « partiellement » mais ...
    j'aimerais sélectionner les données qui m'intéresse
    c'est le premier point à régler, qu'entends tu par « sélectionner les données », de qui, de quoi ?

    PS : pour tester il serait bon d'avoir un morceau représentatif de l'objet directement exploitable.

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    J'ai pu avancer, grâce à la bibliothèque FileSaver.js j'arrive à obtenir un fichier CSV avec une valeur d'une donné d'un formulaire

    Voici le code :
    Code html : 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
    <!DOCTYPE html>
    <meta charset="utf-8"/>
    <html>
    	<head>
    		<title>This is Website Title</title>
    		<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js" type="text/javascript"></script>
    		<script src="../FileSaver.js"></script>
    		<script>
                            var formId = 566091
                            // Définition des paramètres de la requête HTTP
                            var settings = {
                                    "async": true,
                                    "crossDomain": true,
                                    "url": "https://www.kizeoforms.com/rest/v3/forms/"+formId+"/data/readnew",
                                    "method": "GET",
                                    "headers": {
                                            "content-type": "application/json",
                                            "Authorization": "******",
                                    }
                            }
     
                            // Envoi de la requête et affichage en console de la réponse
                            $.ajax(settings).done(function (response) {
                                    console.log(response); 
                                    var ssa3 = response.data[0].fields.ssa_3_a_22h00.value;
                                    var blob = new Blob([ssa3], {type: "application/csv;charset=utf-8"});
                                    saveAs(blob, "ssa3.csv");
                            });
                    </script>
    	</head>
    </html>

    Maintenant j'aimerais améliorer ce code pour qu'il me renvoie la valeur de ce champ pour toutes les données, j'ai commencé avec ça :

    Code html : 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
    <!DOCTYPE html>
    <meta charset="utf-8"/>
    <html>
    	<head>
    		<title>This is Website Title</title>
    		<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js" type="text/javascript"></script>
    		<script src="../FileSaver.js"></script>
    		<script>
                            var formId = 566091
                            // Définition des paramètres de la requête HTTP
                            var settings = {
                                    "async": true,
                                    "crossDomain": true,
                                    "url": "https://www.kizeoforms.com/rest/v3/forms/"+formId+"/data/readnew",
                                    "method": "GET",
                                    "headers": {
                                            "content-type": "application/json",
                                            "Authorization": "******",
                                    }
                            }
     
                            // Envoi de la requête et affichage en console de la réponse
                            $.ajax(settings).done(function (response) {
                                    console.log(response);
                                    var ssa3 = [];
                                    for (var i = 0 ; i <= response.data.length; i++) {
                                            ssa3.push(response.data[i].fields.ssa_3_a_22h00.value);
                                    }
                                    var blob = new Blob([ssa3], {type: "application/csv;charset=utf-8"});
                                    saveAs(blob, "ssa3.csv");
                            });
                    </script>
    	</head>
    </html>

    Une boucle for pour balancer les valeur dans un tableau c'est ce qui me paraissait logique, or on me dit que i n'est pas définit dans la console, et la je bloque de nouveau :

    Nom : i undefined.png
Affichages : 668
Taille : 2,4 Ko

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    for (var i = 0 ; i <= response.data.length; i++)
    pourquoi mettre <=, les indices des tableaux commencent à 0 et se terminent à length-1.

    Autant faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    const ssa3 = [];
    const data = response.data;
    data.forEach(function (el) {
      ssa3.push(el.fields.ssa_3_a_22h00.value);
    });
    ou quelque chose d'approchant en faisant peut-être des tests d'existence.

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    Merci ça fonctionne


    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
    $.ajax(settings).done(function (response) {
      				console.log(response);
      				var ssa3 = [];
      				const data = response.data;
     
      				ssa3.push("Numéro d'enregistrement,ID,Date et heure,valeur SSA3");
     
    				data.forEach(function (i) {
    					var heure
    					ssa3.push("\r\n" + i.record_number + "," + i.id + "," + i.fields.date_et_heure.value + "," + i.fields.ssa_3_a_22h00.value);
    				});
     
      				var blob = new Blob([ssa3], {type: "application/csv;charset=utf-8"});
    				saveAs(blob, "ssa3.csv");
      			});

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

Discussions similaires

  1. [Python 3.X] Générer un fichier CSV à partir d'une liste
    Par blueice dans le forum Général Python
    Réponses: 1
    Dernier message: 20/04/2015, 15h38
  2. Comment générer un fichier texte à partir d'un XML et XSL
    Par Jayceblaster dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 24/07/2005, 22h42
  3. générer un fichier xml à partir xsl ou xslt
    Par sarah1 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/05/2005, 17h57
  4. Réponses: 4
    Dernier message: 02/05/2005, 20h25
  5. Réponses: 2
    Dernier message: 27/05/2004, 00h40

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