Sådan parses JSON i Python

JSON er et populært format til dataudveksling. Python leveres med et indbygget JSON-modul til at parse og arbejde med JSON-data. Og denne tutorial vil lære dig alt om at arbejde med JSON i Python.

Ved slutningen af ​​denne øvelse har du lært:

  • det grundlæggende i JSON,
  • hvordan man parser og opretter JSON-strenge i Python, og
  • hvordan man læser fra og skriver til JSON-filer i Python.

Lad os starte!⏳

Hvad er JSON?

JSON står for JavaScript Object Notation, og det er et tekstbaseret format til dataudveksling. Selvom JSON oprindeligt er inspireret af JavaScript-objekter, understøtter næsten alle programmeringssprog at arbejde med JSON.

Hvis du nogensinde har arbejdet med API’er eller læst konfigurationsfiler igennem – ville du sandsynligvis have løbet ind i JSON.

📑 Du sender og modtager data i JSON, når du forespørger API’er. Og JSON er også meget brugt i klient-server-kommunikation i softwareapplikationer. Derudover kan du også bruge JSON til generel datalagring.

Formatet på JSON er meget lig det for en Python-ordbog. Ordbøger er kraftfulde indbyggede datastrukturer i Python, der gemmer data i nøgleværdi-par.

Før vi går videre, er her et par punkter, der er værd at bemærke:

  • I Python er et JSON-objekt gemt som en ordbog.
  • Et array i JSON er gemt som en Python-liste.
  • I JSON er de boolske værdier angivet som sande og falske. I Python konverteres disse til Booleans True og False.

For flere detaljer om de datatyper, der er oversat fra JSON til Python, skal du læse dokumenterne her.

Da json-modulet er en del af Python-standardbiblioteket, behøver du ikke installere det. Du kan importere til din nuværende mappe på denne måde:

import json

Sådan indlæses en JSON-streng i Python

Den generelle syntaks til at indlæse en JSON-streng i Python er:

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

Her,

  • er Python-ordbogen, som du gerne vil indlæse JSON-strengen til,
  • er en hvilken som helst gyldig JSON-streng.

Dette indlæser i Python-ordbogen .

Lad os kode et eksempel. Her er json_str en JSON-streng.

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

Og kodestykket nedenfor viser, hvordan du kan indlæse JSON-strengen json_str i en Python-ordbog ved hjælp af loads()-metoden. Du kan bruge den indbyggede type()-funktion til at bekræfte, at py_dict er en Python-ordbog.

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'}]}

Som vist i ovenstående kode er alle felter i JSON-strengen nøgle-værdi-par i py_dict.

Sådan opretter du JSON-strenge i Python

Lad os antage, at du har en Python-ordbog. Så hvordan opretter du en JSON-streng ud fra den?

Du kan gøre det ved at bruge dumps() metoden med denne syntaks:

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

Her,

  • er Python-ordbogen, hvorfra du vil oprette JSON-strengen,
  • er den resulterende JSON-streng.

Så dumps()-metoden dumper i en JSON-streng .

Til vores eksisterende Python-ordbog py_dict. lad os tilføje en ny nøgle “film”. Du kan gøre det som vist i følgende kodestykke:

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

Lad os nu dumpe den ændrede ordbog til en ny JSON-streng json_str2 ved hjælp af dumps()-metoden.

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}]}

Som du kan se i ovenstående eksempel, er output-JSON-strengen svær at læse uden korrekt formatering. Du kan bruge den valgfri parameterindrykning til at tilføje indrykning.

Og du kan gøre dette ved at sætte indrykning til et heltal som 2, som vist nedenfor:

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
    }
  ]
}

Se, hvordan outputtet er blevet formateret med indrykning, og det er nemt at følge igennem.

Bemærk: 💡 Hvis du ønsker, at nøglerne skal sorteres i alfabetisk rækkefølge, kan du indstille parameteren sort_keys til True.

Som du kan se i kodestykket nedenfor, er nøglerne nu sorteret i alfabetisk rækkefølge.

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"
    }
  ]

Og tasterne vises nu i alfabetisk rækkefølge: “forfatter”, “titel” og “år”.

Indtil videre har du lært, hvordan du arbejder med JSON-strenge i Python. I næste afsnit lærer du, hvordan du arbejder med JSON-filer.

Sådan læser du en JSON-fil i Python

For at læse en JSON-fil i Python skal du bruge følgende syntaks:

json.load(<json-file>) 

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

Bemærk, hvordan vi bruger load()-metoden og ikke loads()-metoden. loads() indlæser en JSON-streng, mens load() indlæser en JSON-fil.

Du bør overveje at bruge kontekstadministratorer, når du arbejder med filer i Python. Du kan også prøve at læse filer som følger uden at bruge konteksthåndtering:

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

contents = my_file.read()

print(contents)

file.close()

Hvis du ikke lukker filen, kan der være et potentielt spild af ressourcer.

Men når du arbejder med kontekstadministratorer, lukkes filerne automatisk, når filhandlingerne er afsluttet.

Og du kan bruge konteksthåndtering til at læse filer, som vist nedenfor:

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'}]}

Mens du læser fra en fil, skal du angive tilstanden som læst – angivet med ‘r’ i ovenstående kode.

Bemærk: For let at navigere gennem den aktuelle mappe, skal du sørge for, at JSON-filen er i samme mappe som main.py, som vist på billedet nedenfor. Hvis din JSON-fil er i en anden mappe, skal du sørge for at angive stien til filen.

Læs JSON-filen i Python.

I næste afsnit lærer du, hvordan du skriver til en JSON-fil.✍

Sådan skriver du til en JSON-fil i Python

For at skrive til en eksisterende JSON-fil eller oprette en ny JSON-fil, skal du bruge dump()-metoden som vist:

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

# where <dict_obj> is a Python dictionary 

# and <json_file> is the JSON file 

Så ovenstående syntaks dumper ordbogen ind i JSON-filen .

I det foregående afsnit havde vi ordbogen py_dict. Lad os nu dumpe det ind i en ny JSON-fil. Og lad os navngive den new_file.json.

Og følgende kodecelle viser, hvordan du kan bruge dump()-funktionen:

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

Bemærk: Åbning af en fil i skrivetilstand (w) overskriver indholdet, hvis filen eksisterer. Hvis filen ikke findes, oprettes filen.

Efter at have udført ovenstående kodecelle, vil du se, at en ny JSON-fil er blevet oprettet i den aktuelle arbejdsmappe. Og du kan gå videre og undersøge indholdet af JSON-filen.

Opret JSON-fil i Python

Når du skriver til filer, er nøglemålet datalagring. Og hvis du gerne vil bevare formateringen, kan du også bruge parametrene indent og sort_keys.

Konklusion

⏲ ​​Det er tid til en hurtig opsummering.

I denne tutorial har du lært:

  • det grundlæggende i at bruge JSON,
  • hvordan man bruger metoderne loads() og load() til at læse henholdsvis JSON-streng og JSON-filer,
  • hvordan man bruger metoderne dumps() og dump() til at dumpe Python-ordbøger i henholdsvis JSON-strenge og JSON-filer.

Jeg håber, du fandt denne tutorial nyttig. God læring!

Du kan også se på JSON Tools for at parse, formatere og validere.

  11 bedste værktøjer til dashboard på sociale medier, analyse og forretningsdata