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

Python Discussion :

Créer un JSON hiérachique à partir d'un tuple de dict listant une généalogie [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut Créer un JSON hiérachique à partir d'un tuple de dict listant une généalogie
    Bonjour.
    J'ai un tuple de dict listant une généalogie de personnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my_tuple =[{"id":"1", "parent_id":"", "name":"name_1"},
    {"id":"2", "parent_id":"1", "name":"name_2"},
    {"id":"3", "parent_id":"2", "name":"name_3"},
    {"id":"4", "parent_id":"2", "name":"name_4"},
    {"id":"5", "parent_id":"1", "name":"name_5"}]
    Je cherche à obtenir un objet JSON de la forme :
    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
    {"name": "name_1",
    "children":
        [
            {
            "name":"name_2",
            "children":
                [
                {"name":"name_3"},
                {"name":"name_4"}
                ]
            },
            {
            "name":"name_5"
            }
        ]
    }
    j'imagine qu'il faut utiliser reduce (my_choice, my_tuple) avec une fonction my_choice() qui prend en argument les dicts Dx, Dx+1 et qui retourne différemment en fonction de la valeur de Dx+1["parent_id"] == Dx["id"] , mais je ne réussis pas à trouver ce que doit renvoyer choice() pour que reduce() concatène correctement ...
    Si quelqu'un peut m'orienter, merci par avance.
    Yves

  2. #2
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut
    Finalement, j'ai trouvé tout seul. Pour ceux que ça peut intéresser. Ce n'est pas très propre mais ça fonctionne en ajoutant un item "generation" (Ca commence à 0, les enfants valent 1, les petits-enfants valent 2; etc.)
    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
    """
    0   id
    1   parent_id
    2   name
    3   birthday
    4   deathday
    5   conjoint
    6   generation
    """
     
    json_0 = ""
    for p in text_7:
        parent = p[1]
        if p[0] == 0: # debex
            json_0 ='{ "id": '+str(p[0])+', "name": "'+p[2]+'","birthday": '+p[3]+',"generation": '+str(p[6])+''
        else:
            if p[1] == previous_id: # actuel est enfant du précédent
                json_0 += ',"children": [ { "id": '+str(p[0])+', "name": "'+str(p[2])+'","birthday": '+p[3]+',"generation": '+str(p[6])+''
                previous_is_children = True
            elif p[1] == previous_parent: # actuel est frère/soeur du précédent
                json_0 += '},{ "id": ' + str(p[0]) + ', "name": "' + p[2] + '","birthday": ' +p[3]+',"generation": '+str(p[6])+''
                previous_is_children = True
            else:
                gen = '}'
                for a in range(previous_generation - p[6]):
                    gen += ']},'
                json_0 += gen+'{ "id": ' + str(p[0]) + ', "name": "' + p[2] + '","birthday": ' +p[3]+',"generation": '+str(p[6])+''
                previous_is_children = False
        previous_id = p[0]
        previous_parent = p[1]
        previous_generation = p[6]
    json_0 += '}'
    gen = ''
    for a in range(previous_generation):
        gen += ']},'
    json_0 += gen
    json_0 = json_0[:-1]
    print(json_0)
    Il y aussi la bibliothèque anyTree, mais je n'ai pas fouillé.

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

Discussions similaires

  1. créer des objets a partir d'un json
    Par dandy-kun dans le forum Langage
    Réponses: 3
    Dernier message: 09/09/2015, 11h53
  2. Réponses: 0
    Dernier message: 11/02/2015, 12h06
  3. créer fichier json à partir d'un tableau
    Par robin52 dans le forum Langage
    Réponses: 6
    Dernier message: 29/01/2015, 15h48
  4. [C#] Créer un fichier Xml à partir d'un objet
    Par Troopers dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/09/2004, 13h23
  5. Réponses: 2
    Dernier message: 29/07/2003, 12h52

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