-1

This is the payload

     payload = '''
{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": [
                {
                    "ID": "ABCD",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                },
                {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                },
                {
                    "ID": "PQRS",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                },
                {
                    "ID": "ABRA",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            ]
        }
    }
}

'''

Take this json string above as input and print the output JSON in which the GlossList is sorted (sorted by ID).

lmiguelvargasf
  • 63,191
  • 45
  • 217
  • 228
Rahman
  • 1

3 Answers3

0

First, the JSON you have provided is not valid. I have edited your answer providing a valid one.

Answering your question:

  1. you have to convert your string to dictionary using ast.literal_eval().
  2. you can apply:

    2.1 sorted function, if so, then you have to construct your original dictionary, but this time sorted.

    2.2 sort method

Applying sorted function

payload = ast.literal_eval(json_string)
sub_order_dict = sorted(payload["glossary"]["GlossDiv"]["GlossList"], key=lambda x: x["ID"])
d = {'glossary': {'title': 'example glossary',
     'GlossDiv': {'title': 'S',
           'GlossList': sub_order_dit}}}

Appying sort method

payload = ast.literal_eval(json_string)
payload["glossary"]["GlossDiv"]["GlossList"].sort(key=lambda x: x["ID"])

For both cases, the output of payloadis:

{'glossary': {'title': 'example glossary',
  'GlossDiv': {'title': 'S',
   'GlossList': [{'ID': 'ABCD',
     'SortAs': 'SGML',
     'GlossTerm': 'Standard Generalized Markup Language',
     'Acronym': 'SGML',
     'Abbrev': 'ISO 8879:1986',
     'GlossDef': {'para': 'A meta-markup language, used to create markup languages such as DocBook.',
      'GlossSeeAlso': ['GML', 'XML']},
     'GlossSee': 'markup'},
    {'ID': 'ABRA',
     'SortAs': 'SGML',
     'GlossTerm': 'Standard Generalized Markup Language',
     'Acronym': 'SGML',
     'Abbrev': 'ISO 8879:1986',
     'GlossDef': {'para': 'A meta-markup language, used to create markup languages such as DocBook.',
      'GlossSeeAlso': ['GML', 'XML']},
     'GlossSee': 'markup'},
    {'ID': 'PQRS',
     'SortAs': 'SGML',
     'GlossTerm': 'Standard Generalized Markup Language',
     'Acronym': 'SGML',
     'Abbrev': 'ISO 8879:1986',
     'GlossDef': {'para': 'A meta-markup language, used to create markup languages such as DocBook.',
      'GlossSeeAlso': ['GML', 'XML']},
     'GlossSee': 'markup'},
    {'ID': 'SGML',
     'SortAs': 'SGML',
     'GlossTerm': 'Standard Generalized Markup Language',
     'Acronym': 'SGML',
     'Abbrev': 'ISO 8879:1986',
     'GlossDef': {'para': 'A meta-markup language, used to create markup languages such as DocBook.',
      'GlossSeeAlso': ['GML', 'XML']},
     'GlossSee': 'markup'}]}}}
lmiguelvargasf
  • 63,191
  • 45
  • 217
  • 228
0

If you just need the GlossList sorted try using sorted with lambda in key

Ex:

print( sorted(payload["glossary"]["GlossDiv"]["GlossList"], key=lambda x: x["ID"]) )

Output:

[{'Abbrev': 'ISO 8879:1986',
  'Acronym': 'SGML',
  'GlossDef': {'GlossSeeAlso': ['GML', 'XML'],
               'para': 'A meta-markup language, used to create markup languages such as DocBook.'},
  'GlossSee': 'markup',
  'GlossTerm': 'Standard Generalized Markup Language',
  'ID': 'ABCD',
  'SortAs': 'SGML'},
 {'Abbrev': 'ISO 8879:1986',
  'Acronym': 'SGML',
  'GlossDef': {'GlossSeeAlso': ['GML', 'XML'],
               'para': 'A meta-markup language, used to create markup languages such as DocBook.'},
  'GlossSee': 'markup',
  'GlossTerm': 'Standard Generalized Markup Language',
  'ID': 'ABRA',
  'SortAs': 'SGML'},
 {'Abbrev': 'ISO 8879:1986',
  'Acronym': 'SGML',
  'GlossDef': {'GlossSeeAlso': ['GML', 'XML'],
               'para': 'A meta-markup language, used to create markup languages such as DocBook.'},
  'GlossSee': 'markup',
  'GlossTerm': 'Standard Generalized Markup Language',
  'ID': 'PQRS',
  'SortAs': 'SGML'},
 {'Abbrev': 'ISO 8879:1986',
  'Acronym': 'SGML',
  'GlossDef': {'GlossSeeAlso': ['GML', 'XML'],
               'para': 'A meta-markup language, used to create markup languages such as DocBook.'},
  'GlossSee': 'markup',
  'GlossTerm': 'Standard Generalized Markup Language',
  'ID': 'SGML',
  'SortAs': 'SGML'}]
Rakesh
  • 81,458
  • 17
  • 76
  • 113
0
>>> import json
>>> d = json.loads(payload)
>>> d['glossary']['GlossDiv']['GlossList'].sort(key=lambda x: x['ID'])
>>> print (json.dumps(d, indent=4))

Output

{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": [
                {
                    "ID": "ABCD",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": [
                            "GML",
                            "XML"
                        ]
                    },
                    "GlossSee": "markup"
                },
                {
                    "ID": "ABRA",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": [
                            "GML",
                            "XML"
                        ]
                    },
                    "GlossSee": "markup"
                },
                {
                    "ID": "PQRS",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": [
                            "GML",
                            "XML"
                        ]
                    },
                    "GlossSee": "markup"
                },
                {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": [
                            "GML",
                            "XML"
                        ]
                    },
                    "GlossSee": "markup"
                }
            ]
        }
    }
}
Sunitha
  • 11,777
  • 2
  • 20
  • 23