p
u
b
l
i
c
i
t
é
publicité

Discussion: Trier un fichier JSON

  1. #1
    Invité de passage
    Inscrit en
    mars 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : mars 2008
    Messages : 6
    Points : 1
    Points
    1

    Par défaut Trier un fichier JSON

    Bonjour,

    J'ai une chaîne json que je voudrais trier, la clé "values" contient différents dictionnaires, chaque dictionnaire a des éléments qui doivent être trié selon la valeur numérique de leur clé "i". Par exemple, dans universe il y a "spatialunits" qui a pour valeur de "i" : 2, alors "spatialunits devra s'afficher en 3eme position.

    J'ai essayé de cette manière mais ça ne marche pas, le tri ne se fait pas. Pourriez-vous m'aider à déboguer s'il vous plait?

    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
    39
    40
    41
    42
     
    # -*- coding: utf8 -*-
     
    from collections import OrderedDict 
     
    import pprint
    import json
     
     
    data = {"labels":
            {
             "langdoc":"Langage documentation","locationofunitsofobservation":"Niveau de comparatisme"},
     
     
            "values":{
                      "universe":{
                                  "spatialunits":{
                                                  "i":2,
                                                  "value":["Paris, Bruxelles, Oxford"]},
     
                                  "locationofunitsofobservation":{
                                                                  "i":0,
                                                                  "value":["international"]},
     
     
                                  "i":2,"targetgroups":{
                                                        "i":4,"value":["cadres, employés, ouvriers, militants"]},
                                  "observunits":{
                                                 "i":3,"value":["groupes de discussion"]},
                                  "geogcover":{
                                               "i":1,"value":["nationale (France, Belgique, Royaume-Uni)"]},"studydates":{"i":5,"value":["2005-2012"]}
    }                                                                                                                                                                                                   
    }}}}
     
     
     
    pp = pprint.PrettyPrinter(indent=4)
     
     
    sort_dict = [x for x in data['values'].iteritems()]
     
    pp.pprint(OrderedDict(sorted(sort_dict, key=lambda x: x[1]['i']))) # sort by key

  2. #2
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    6 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 6 681
    Points : 10 293
    Points
    10 293

    Par défaut

    Salut,
    Si la chaîne de caractères JSON à traiter est la chose assignée à data, il serait sage que ce soit une chaîne de caractères i.e.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data = '''<<< le string json >>>'''
    Pour la transformer en objet Python, il faudra faire "json_data = json.loads(data)".
    Repostez votre code avec la vraie string JSON (si nécessaire).
    Dans l'état c'est de la bouille.
    - W
    Architectures Post-Modernes

  3. #3
    Invité de passage
    Inscrit en
    mars 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : mars 2008
    Messages : 6
    Points : 1
    Points
    1

    Par défaut

    Finalement j'ai trouvé la solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    new = {}
     
    for k in data['values']:
        new[k] = OrderedDict(sorted([x for x in data['values'][k].iteritems() if isinstance(x[1], dict)], key=lambda x: x[1]['i'] ))
        #pp.pprint(OrderedDict(sorted([x for x in data['values'][k].iteritems() if isinstance(x[1], dict)], key=lambda x: x[1]['i'] )))
     
    data['values'] = new
     
    print(data)

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

Discussions similaires

  1. Trier un fichier
    Par Premium dans le forum C
    Réponses: 12
    Dernier message: 23/01/2006, 09h12
  2. trier des fichiers avec un tableau flexgrid
    Par digger dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 08/12/2005, 15h20
  3. Trier un fichier
    Par enicnath dans le forum Général Python
    Réponses: 5
    Dernier message: 10/11/2005, 17h31
  4. [XSLT] - Trier un fichier sur plusieurs critères
    Par ytse dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/10/2005, 16h26
  5. Trier les fichiers par type et les afficher par groupe ...
    Par KneXtasY dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 18/09/2005, 18h50

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