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

Langages serveur Discussion :

[JSON] Générer clés valeurs de JSON vers Classe


Sujet :

Langages serveur

  1. #1
    Membre régulier
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Points : 101
    Points
    101
    Par défaut [JSON] Générer clés valeurs de JSON vers Classe
    Salut à tous,

    Dans le cadre de mon travail je dois transposer un fichier json vers un autre.

    ex:
    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    {
      "Title": "Translation example",
      "Intro": "Hello I am Dende, I am 500 years old.",
      "Startpage": {
        "TranslationSections": "Hello World",
            "TranslationsSubSections" :{
              "TitleOne"  : "Hello All",
              "TitleTwo"  : "Hello You",
              "TitleTree" : "Hello Me"
            }
      },
      "Aboutpage": {
        "TranslationSections": "We are letsboot"
      }
    }

    je souhaite créer une ou plusieurs classes à cette fin.
    Comme dans un base de données un structure json est représentée avec une colonnes et ces différentes valeurs.

    Seulement dans mon cas les colonnes ne sont pas définies tout comme les valeurs.

    Alors je fais ceci en gros pour représenter mon fichier json en classe:

    ex en pseudo code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Value { 
        key:string;
        value:string;
        constructor(key:string,value:string)
         { this.key = key;this.value=value;}
        ...
         getter;
         setter;
    }

    et pour les sous tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class ValueArray {
        key:string;
        Array<Value> values;
        constructor(key:string,values:Array<Value>){
           this.key = key;
           this.values = values;
         }
         ...
         getter;
         setter;
    }
    Par contre faut voir si l'array dans le constructeur on le traite comme ça ?

    je viens de framework comme symfony donc c'est gérer autrement..

    je dois passer de json vers classe(attribut) et de classe vers json ..

    dites moi si j'ai bon jusque là?

    je pense aussi comme je suis en typescript a Json parse et Json stringify..

    Vous penser que comme cà je peux resoudre ce traitement?

    Merci pour vos réactions.

  2. #2
    Membre chevronné

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Points : 1 768
    Points
    1 768
    Billets dans le blog
    1
    Par défaut
    Salut lorsque tu dit que tu as un fichier Json et que celui ci doit être transposé d'où provient les données de ce Json et ceux de la transposition?
    Car si ça provient d'une base de donnée accessible, tu fait du traitement pour rien, il suffit de passer toutes les données dans un Json complet et faire tes transposition a partir de ton json côté JS, ta classe ne te servira a rien a part faire du traitement pour rien car tu as un Json c'est déjà un "object" exploitable, l'avantage tout tes traitement sans rechargement,car tu peux générer avec JS au niveau de l'affichage de tes données selon x events, le désavantage non des moindres si JS et désactivé...

  3. #3
    Membre régulier
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Points : 101
    Points
    101
    Par défaut Pas de base données
    Je n'ai pas de base de données

    En fait c'est un fichier de traduction en anglais

    Et je dois le traduire en plusieurs langues

    La structure dois rester là même donc les clés mais pas les valeurs de type primitifs

    Si en js tout est déjà objet comment faire pour parcourir le fichier et ainsi avoir des objets et des tableaux d'objets ?

  4. #4
    Membre chevronné

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Points : 1 768
    Points
    1 768
    Billets dans le blog
    1
    Par défaut
    Tu peux charger tes traductions directement dans un js ou dans ta balise <script> ou voir appelé via ajax ...

    Code JavaScript : 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
    59
    60
    61
    62
    63
    64
    var lg_en = {
      "Title": "Translation example",
      "Intro": "Hello I am Dende, I am 500 years old.",
      "Startpage": {
        "TranslationSections": "Hello World",
            "TranslationsSubSections" :{
              "TitleOne"  : "Hello All",
              "TitleTwo"  : "Hello You",
              "TitleTree" : "Hello Me"
            }
      },
      "Aboutpage": {
        "TranslationSections": "We are letsboot"
      }
    };
     
    var lg_fr = {
      "Title": "Traduction exemple",
      "Intro": "Salut je suis Dende, j'ai 500 ans.",
      "Startpage": {
        "TranslationSections": "Bonjour le Monde",
            "TranslationsSubSections" :{
              "TitleOne"  : "Salut à tous",
              "TitleTwo"  : "Salut toi",
              "TitleTree" : "Salut moi"
            }
      },
      "Aboutpage": {
        "TranslationSections": "Nous somes ..."
      }
    };
     
    var lg_es = {
      "Title": "Traduçion exempo",
      "Intro": "Holla me gusto Dende, me  500 anos.",
      "Startpage": {
        "TranslationSections": "Holla el mundo",
            "TranslationsSubSections" :{
              "TitleOne"  : "Hollas",
              "TitleTwo"  : "Holla tu",
              "TitleTree" : "Hola me"
            }
      },
      "Aboutpage": {
        "TranslationSections": "Vamos a la playa ..."
      }
    };
     
     
     
    $('#lg').change(function(){
     
      var obj = `lg_` + $(this).val();
      var data = $(window[obj])[0];
     
      $('#Title').text(data.Title);
      $('#Intro').text(data.Intro);
      $('#TranslationSections').text(data.Startpage.TranslationSections);
      $('#TitleOne').text(data.Startpage.TranslationSections.TranslationsSubSections.TitleOne);
      $('#TitleTwo').text(data.Startpage.TranslationSections.TranslationsSubSections.TitleTwo);
      $('#TitleTree').text(data.Startpage.TranslationSections.TranslationsSubSections.TitleTree);
     
     
    });

    démo :
    https://codepen.io/headmax/pen/bYmQeq?editors=1111

  5. #5
    Membre régulier
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Points : 101
    Points
    101
    Par défaut Objectif en backend
    Mon script est plutôt pour tourner en backend

    voici le retour de console log:

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    { eventsk: { traffick: { editk: [Object], visualizek: [Object] } },
      lolok: 'lolo',
      test1k: { test2k: { test3k: [Object] } } }

    et voici la fonction:

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function toJson(json) : Object{
        let parsed;
        try {
            parsed = JSON.parse((json));
        } catch (e) {
            parsed = {};
        }
     
        return parsed;
    }

    je comprend pas pourquoi les sous niveaux sont OBJECT et pas des string..

  6. #6
    Membre chevronné

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Points : 1 768
    Points
    1 768
    Billets dans le blog
    1
    Par défaut
    Désolé mais je comprend pas ce que tu fait j'ai un résultat de console dont je ne sais pas ou ça provient dans ton code, et ta petite function qui en gros JSON.parse quoi est pour qu'elle raison?? sachant que je t'ai dit que JSON est déjà un object exploitable, je pense qu'il y a confusion ou j'ai pas compris la réel finalité de tous ça.

  7. #7
    Membre régulier
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Points : 101
    Points
    101
    Par défaut Oui je suis d'accord
    Je suis d'accord je parse alors que c'est inutile..
    Ça ne viens pas de php par exemple pour parser


    Comme mon fichier est séparé de mon script je doit le lire
    Pour mon objet json j'ai besoin d'une boucle pour le parcourir
    Et pour traduire je dois recréer le fichier json..

    J'ai besoin qu'ont m'éclaire sur ces points..

  8. #8
    Membre chevronné

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Points : 1 768
    Points
    1 768
    Billets dans le blog
    1
    Par défaut
    Pour "loadé" tes jsons tu peux faire comme dans mon exemple : les jsons sont nommées lg_fr.json, lg_es.json, lg_en.json lors du select je charge les différentes version selon le choix de la langue.

    NB: J'utilise Jquery (pour sa rapidité de mise en oeuvre et sa portabilité cross browser)

    Code JavaScript : 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
    $('#lg').change(function(){
     
      var obj = `lg_` + $(this).val();
     
      $.getJSON(
        "https://remmache.fr/map/" + obj + ".json",
          function(data) {
            console.log(data.length);
     
            //var data = $(window[obj])[0];
     
          $('#Title').text(data.Title);
          $('#Intro').text(data.Intro);
          console.log(data.Startpage.TranslationsSubSections.TitleOne)
          $('#TranslationSections').text(data.Startpage.TranslationSections);
          $('#TitleOne').text(data.Startpage.TranslationsSubSections.TitleOne);
          $('#TitleTwo').text(data.Startpage.TranslationsSubSections.TitleTwo);
          $('#TitleTree').text(data.Startpage.TranslationsSubSections.TitleTree);
     
          }
        );
    });
    //sous codepen il ne veux pas loader mes json donc je le met sur un autre domaine

    Démo:
    https://remmache.fr/map/json_load.html

    Les jsons :
    https://remmache.fr/map/lg_fr.json
    https://remmache.fr/map/lg_es.json
    https://remmache.fr/map/lg_en.json
    Lorsque tu dit que tu as besoin d'une boucle ?? je comprend pas l'intérêt ton json est linéaire il n'en a pas besoin, par contre si c'est pas le même "JSON" que tu as alors tu me mène en déroute puisque c'est comme si tu donnait une table d'une base de donnée qui est structurellement figé, et que tu bosse avec une autre table. Si c pas la même structure, c'est pas cool pour ceux qui aide ...

  9. #9
    Membre régulier
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Points : 101
    Points
    101
    Par défaut oui précision
    Je comprends

    mais je ne fais pas ça pour cacher le code ou les données

    même si je ne donne pas vraiment le json sur lequel je travaille..

    en l'occurrence ce script doit tourner sur n'importe quel json

    car il sera mis à jour par la montée en version de l'app

    moi-même je n'ai qu'un fragment de couple clés valeurs imbriquées.

    du coup je retourne à une structure map car les clés seront pas fixes mais aléatoires.

    quand j'ai ceci:

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function objectToStringMap(object)
    {
        let strMap = new Map();
        for(let j of Object.keys(object)){
            if(typeof object[j] === 'object')
                strMap.set(j,objectToStringMap(object[j]));
            else
                strMap.set(j,object[j]);
        }
        return strMap;
    }

    j'ai ce [Object] qui me dérange, que dois-je faire?

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Map {
      'eventsk' => Map {
      'traffick' => Map {
      'editk' => [Object],
      'test' => [Object],
      'visualizek' => [Object] } },
      'lolok' => 'lolo',
      'test1k' => Map { 'test2k' => Map { 'test3k' => [Object] } } }

  10. #10
    Membre chevronné

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Points : 1 768
    Points
    1 768
    Billets dans le blog
    1
    Par défaut
    Génial, je réponds au fur et a mesure des compléments d'informations, tout ce que je redoute lorsqu'on est pas clair sur ce qu'on s'apprête a accomplir .
    Je réponds pour le problème object peut être un JSON.stringify, j'en suis pas sur et j'ai pas tout les éléments d'ailleurs toi non plus.

    Bien à toi.

  11. #11
    Membre régulier
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Points : 101
    Points
    101
    Par défaut structure indefini
    Comme ma structure est indefini

    pour la raison que je ne sait pas quel cles et valeur sera traité

    j'utilise une structure Map imbriquer

    1. je lit mon json
    2. je le transpose en Map
    3. je retranspose en objet
    4. et je fais mon traitement
    5. avant de le transposer en map et ecrire dans mon fichier JSON



    une ou deux etapes serais a simplifier a voir?

Discussions similaires

  1. Réponses: 9
    Dernier message: 08/06/2017, 11h29
  2. [AJAX] Récupérer les clés d'un json après une requête ajax
    Par Nico_SAS dans le forum jQuery
    Réponses: 4
    Dernier message: 25/06/2014, 15h18
  3. Attribut data-* valeur format json
    Par okoweb dans le forum jQuery
    Réponses: 17
    Dernier message: 25/10/2012, 19h27
  4. [AJAX] json parcours des valeurs
    Par loustalet dans le forum AJAX
    Réponses: 4
    Dernier message: 18/01/2012, 00h05
  5. JSON : envoi de tableau de String vers le Javascript
    Par Nicolas74100 dans le forum Général JavaScript
    Réponses: 27
    Dernier message: 02/10/2010, 21h47

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