Hoe JSON in Python te parseren

JSON is een populair formaat voor gegevensuitwisseling. Python wordt geleverd met een ingebouwde JSON-module om JSON-gegevens te ontleden en ermee te werken. En deze tutorial leert je alles over het werken met JSON in Python.

Aan het einde van deze tutorial heb je geleerd:

  • de basis van JSON,
  • hoe JSON-strings in Python te ontleden en te maken, en
  • hoe te lezen van en te schrijven naar JSON-bestanden in Python.

Laten we beginnen!

Wat is JSON?

JSON staat voor JavaScript Object Notation en is een op tekst gebaseerd formaat voor gegevensuitwisseling. Hoewel JSON in eerste instantie is geïnspireerd op JavaScript-objecten, ondersteunen bijna alle programmeertalen het werken met JSON.

Als je ooit met API’s hebt gewerkt of configuratiebestanden hebt gelezen, ben je waarschijnlijk JSON tegengekomen.

📑 U verzendt en ontvangt gegevens in JSON bij het opvragen van API’s. En JSON wordt ook veel gebruikt in client-servercommunicatie in softwaretoepassingen. Bovendien kunt u JSON ook gebruiken voor algemene gegevensopslag.

Het formaat van JSON lijkt erg op dat van een Python-woordenboek. Woordenboeken zijn krachtige ingebouwde gegevensstructuren in Python die gegevens opslaan in sleutel-waardeparen.

Voordat we verder gaan, zijn hier een paar punten die het vermelden waard zijn:

  • In Python wordt een JSON-object opgeslagen als een woordenboek.
  • Een array in JSON wordt opgeslagen als een Python-lijst.
  • In JSON worden de Booleaanse waarden aangeduid als waar en onwaar. In Python worden deze geconverteerd naar de Booleans True en False.

Voor meer details over de datatypes die vertaald worden van JSON naar Python, lees de docs hier.

Omdat de json-module deel uitmaakt van de Python-standaardbibliotheek, hoeft u deze niet te installeren. U kunt als volgt in uw huidige map importeren:

import json

Hoe een JSON-tekenreeks in Python te laden

De algemene syntaxis om een ​​JSON-tekenreeks in Python te laden is:

<dict_obj> = json.loads(<json_str>)

Hier,

  • is het Python-woordenboek waarnaar u de JSON-tekenreeks wilt laden,
  • is een geldige JSON-tekenreeks.

Dit laadt de in het Python-woordenboek .

Laten we een voorbeeld coderen. Hier is json_str een JSON-tekenreeks.

json_str=""'
{
    "books": [
        {
            "title": "The Wind in the Willows",
            "author": "Kenneth Grahame",
            "year": "1908"
        },
        {
            "title": "To the Lighthouse",
            "author": "Virginia Woolf",
            "year": "1927"
        }
    ]
}
'''

En het onderstaande codefragment laat zien hoe u de JSON-tekenreeks json_str in een Python-woordenboek kunt laden met behulp van de methode Loads(). U kunt de ingebouwde functie type() gebruiken om te controleren of py_dict een Python-woordenboek is.

py_dict = json.loads(json_str)

type(py_dict)

# Output: dict

print(py_dict)

# Output
{'books': [{'title': 'The Wind in the Willows', 
'author': 'Kenneth Grahame', 'year': '1908'}, 
{'title': 'To the Lighthouse', 'author': 'Virginia Woolf', 'year': '1927'}]}

Zoals weergegeven in de bovenstaande code, zijn alle velden in de JSON-tekenreeks sleutel-waardeparen in py_dict.

Hoe JSON-strings in Python te maken

Laten we aannemen dat je een Python-woordenboek hebt. Dus hoe maak je er een JSON-string van?

U kunt dit doen met behulp van de methode dumps() met deze syntaxis:

<json_str> = json.dumps(<dict_obj>)

Hier,

  • is het Python-woordenboek waaruit u de JSON-tekenreeks wilt maken,
  • is de resulterende JSON-tekenreeks.

Dus de dumps() methode dumpt in een JSON string .

Naar ons bestaande Python-woordenboek py_dict. laten we een nieuwe sleutel “films” toevoegen. U kunt het doen zoals weergegeven in het volgende codefragment:

py_dict["movies"] = [{"title":"The Imitation Game","year":"2014",
"lang":"en","watched":True}]

Laten we nu het gewijzigde woordenboek dumpen naar een nieuwe JSON-tekenreeks json_str2 met behulp van de methode dumps().

json_str2 = json.dumps(py_dict)

print(json_str2)

# Output
{"books": [{"title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908"}, 
{"title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927"}], 
"movies": [{"title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true}]}

Zoals u in het bovenstaande voorbeeld kunt zien, is de uitvoer-JSON-tekenreeks moeilijk door te lezen zonder de juiste opmaak. U kunt de optionele parameter inspringing gebruiken om inspringing toe te voegen.

En u kunt dit doen door inspringing in te stellen op een geheel getal zoals 2, zoals hieronder weergegeven:

json_str2 = json.dumps(py_dict, indent = 2)
print(json_str2)

# Output
{
  "books": [
    {
      "title": "The Wind in the Willows",
      "author": "Kenneth Grahame",
      "year": "1908"
    },
    {
      "title": "To the Lighthouse",
      "author": "Virginia Woolf",
      "year": "1927"
    }
  ],
  "movies": [
    {
      "title": "The Imitation Game",
      "year": "2014",
      "lang": "en",
      "watched": true
    }
  ]
}

Kijk hoe de uitvoer is opgemaakt met inspringing, en het is gemakkelijk te volgen.

Opmerking: 💡 Als u wilt dat de toetsen in alfabetische volgorde worden gesorteerd, kunt u de parameter sort_keys instellen op True.

Zoals je kunt zien in het onderstaande codefragment, zijn de sleutels nu op alfabetische volgorde gesorteerd.

json_str2 = json.dumps(py_dict, indent = 2, sort_keys=True)
print(json_str2)

# Output
{
  "books": [
    {
      "author": "Kenneth Grahame",
      "title": "The Wind in the Willows",
      "year": "1908"
    },
    {
      "author": "Virginia Woolf",
      "title": "To the Lighthouse",
      "year": "1927"
    }
  ],
  "movies": [
    {
      "lang": "en",
      "title": "The Imitation Game",
      "watched": true,
      "year": "2014"
    }
  ]

En de toetsen verschijnen nu in alfabetische volgorde: “auteur”, “titel” en “jaar”.

Tot nu toe heb je geleerd hoe je met JSON-tekenreeksen in Python kunt werken. In het volgende gedeelte leert u hoe u met JSON-bestanden kunt werken.

Hoe een JSON-bestand in Python te lezen

Gebruik de volgende syntaxis om een ​​JSON-bestand in Python te lezen:

json.load(<json-file>) 

# where <json-file> is any valid JSON file.

Merk op hoe we de methode load() gebruiken en niet de methode load(). load() laadt een JSON-string, terwijl load() een JSON-bestand laadt.

Overweeg om contextmanagers te gebruiken bij het werken met bestanden in Python. U kunt ook proberen om bestanden als volgt te lezen, zonder contextmanager te gebruiken:

my_file = open('students.json','r')

contents = my_file.read()

print(contents)

file.close()

Als u het bestand niet sluit, kan er een potentiële verspilling van middelen zijn.

Wanneer u echter met contextmanagers werkt, worden de bestanden automatisch gesloten zodra de bestandsbewerkingen zijn voltooid.

En u kunt contextmanager gebruiken om bestanden te lezen, zoals hieronder weergegeven:

with open('students.json','r') as file:   
   data = json.load(file) 
   print(data) 

# Output 

{'students': [{'roll_num': 'cs27', 'name': 'Anna', 'course': 'CS'}, 
{'roll_num': 'ep30', 'name': 'Kate', 'course': 'PHY'}]}

Terwijl u uit een bestand leest, geeft u de modus op als gelezen, aangegeven met ‘r’ in de bovenstaande code.

Opmerking: om gemakkelijk door de huidige map te kunnen navigeren, moet u ervoor zorgen dat het JSON-bestand zich in dezelfde map bevindt als main.py, zoals weergegeven in de onderstaande afbeelding. Als uw JSON-bestand zich in een andere map bevindt, moet u het pad naar het bestand opgeven.

Lees JSON-bestand in Python.

In het volgende gedeelte leert u hoe u naar een JSON-bestand schrijft.✍

Hoe te schrijven naar een JSON-bestand in Python

Om naar een bestaand JSON-bestand te schrijven of om een ​​nieuw JSON-bestand te maken, gebruikt u de methode dump() zoals weergegeven:

json.dump(<dict_obj>,<json_file>)

# where <dict_obj> is a Python dictionary 

# and <json_file> is the JSON file 

Dus de bovenstaande syntaxis dumpt het woordenboek in het JSON-bestand .

In de vorige sectie hadden we het woordenboek py_dict. Laten we dat nu in een nieuw JSON-bestand dumpen. En laten we het new_file.json noemen.

En de volgende codecel laat zien hoe u de functie dump() kunt gebruiken:

with open('new_file.json','w') as file:
  json.dump(py_dict,file)

Opmerking: als u een bestand in de schrijfmodus (w) opent, wordt de inhoud overschreven als het bestand bestaat. Als het bestand niet bestaat, wordt het bestand aangemaakt.

Nadat u de bovenstaande codecel hebt uitgevoerd, ziet u dat er een nieuw JSON-bestand is gemaakt in de huidige werkmap. En u kunt doorgaan en de inhoud van het JSON-bestand bekijken.

JSON-bestand maken in Python

Bij het schrijven naar bestanden is het belangrijkste doel gegevensopslag. En als u de opmaak wilt behouden, kunt u ook de parameters indent en sort_keys gebruiken.

Conclusie

⏲ ​​Het is tijd voor een korte samenvatting.

In deze tutorial heb je geleerd:

  • de basis van het gebruik van JSON,
  • hoe de methodes load() en load() te gebruiken om respectievelijk JSON-tekenreeks en JSON-bestanden te lezen,
  • hoe de methoden dumps() en dump() te gebruiken om Python-woordenboeken respectievelijk in JSON-tekenreeksen en JSON-bestanden te dumpen.

Ik hoop dat je deze tutorial nuttig vond. Veel plezier met leren!

U kunt ook naar JSON Tools kijken om te ontleden, op te maken en te valideren.

  Twee-factorenauthenticatie inschakelen in Slack

gerelateerde berichten