Hur man analyserar JSON i Python

By rik

Introduktion till JSON-hantering i Python

JSON, eller JavaScript Object Notation, är ett vida använt format för dataöverföring. Python erbjuder ett inbyggt JSON-bibliotek som underlättar hanteringen av JSON-data. Denna guide ger dig en grundlig förståelse för hur du arbetar med JSON i Python.

Efter att ha gått igenom denna handledning kommer du att ha kunskap om:

  • Grundläggande principer för JSON-formatet.
  • Metoder för att tolka och generera JSON-strängar i Python.
  • Procedurer för att läsa från och skriva till JSON-filer med Python.

Låt oss börja utforska JSON i Python! 🚀

Vad är JSON?

JSON är ett textbaserat datautbytesformat som härstammar från JavaScript-objekt. Trots sitt ursprungliga samband med JavaScript, finns stöd för JSON i nästan alla programmeringsspråk. Om du har erfarenhet av att arbeta med API:er eller granska konfigurationsfiler har du troligtvis stött på JSON.

JSON används för att skicka och ta emot data vid API-anrop, i klient-server kommunikation i mjukvaruapplikationer, samt för allmän datalagring.

Strukturen i JSON liknar Python-ordböcker, som är inbyggda datastrukturer i Python för att lagra data i nyckel-värde par.

Innan vi fortsätter, några viktiga punkter att notera:

  • Ett JSON-objekt motsvarar en Python-ordbok.
  • En JSON-array motsvarar en Python-lista.
  • De booleska värdena i JSON, ”sant” och ”falskt”, konverteras till ”True” och ”False” i Python.

För ytterligare information om hur datatyper översätts mellan JSON och Python, hänvisas till den officiella dokumentationen här.

Eftersom JSON-modulen är en del av Pythons standardbibliotek, behöver den inte installeras. Den kan importeras direkt i ditt projekt med följande kommando:

import json

Inläsning av JSON-strängar i Python

Grundsyntaxen för att ladda en JSON-sträng i Python är:

<ordboks_objekt> = json.loads(<json_sträng>)

Där:

  • <ordboks_objekt> representerar Python-ordboken som JSON-strängen kommer att laddas in i.
  • <json_sträng> refererar till en giltig JSON-sträng.

Detta läser in <json_sträng> i Python-ordboken <ordboks_objekt>.

Här följer ett kodexempel där json_str är en JSON-sträng:

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

Koden nedan visar hur JSON-strängen json_str kan konverteras till en Python-ordbok med metoden loads(). type() kan användas för att verifiera att py_dict är en Python-ordbok.

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 exemplet visar, representeras alla fält i JSON-strängen som nyckel-värde par i py_dict.

Generera JSON-strängar i Python

Om du har en Python-ordbok, hur omvandlar du den till en JSON-sträng?

Du kan använda metoden dumps() med denna syntax:

<json_sträng> = json.dumps(<ordboks_objekt>)

Där:

  • <ordboks_objekt> är Python-ordboken som du vill konvertera till en JSON-sträng.
  • <json_sträng> är den resulterande JSON-strängen.

dumps() metoden konverterar alltså <ordboks_objekt> till en JSON-sträng <json_sträng>.

Låt oss utöka vår befintliga Python-ordbok py_dict genom att lägga till en ny nyckel ”movies”. Detta görs med följande kod:

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

Nu omvandlar vi den uppdaterade ordboken till en ny JSON-sträng json_str2 med 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 ser i exemplet ovan är den resulterande JSON-strängen svår att läsa utan formatering. Du kan använda den valfria parametern indent för att lägga till indrag.

Detta kan göras genom att sätta indent till ett heltal, t.ex. 2, enligt nedan:

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

Notera hur utskriften är formaterad med indrag vilket gör den lättare att följa.

Obs: Om du vill sortera nycklarna i alfabetisk ordning, sätt parametern sort_keys till True.

Som koden nedan visar har nycklarna nu sorterats i alfabetisk ordning.

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

Nycklarna visas nu i alfabetisk ordning: ”author”, ”title” och ”year”.

Hittills har du lärt dig att hantera JSON-strängar i Python. Nu går vi vidare till hur man arbetar med JSON-filer.

Läsa från en JSON-fil i Python

För att läsa en JSON-fil i Python, använd följande syntax:

json.load(<json-fil>) 

# where <json-file> är en giltig JSON-fil.

Notera att vi använder metoden load() och inte loads(). loads() används för att läsa en JSON-sträng, medan load() läser en JSON-fil.

Det är rekommenderat att använda kontexthanterare när man arbetar med filer i Python. Du kan läsa en fil enligt följande, utan att använda kontexthanteraren:

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

contents = my_file.read()

print(contents)

file.close()

Att inte stänga filen kan leda till resursslöseri. Med kontexthanterare stängs filen automatiskt när filoperationerna är färdiga.

Här visas hur man läser filer med kontexthanteraren:

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

Vid läsning från en fil, specificera läget som ”läs”, vilket indikeras med 'r' i koden ovan.

Obs: För att underlätta filhanteringen, placera JSON-filen i samma katalog som main.py. Om filen ligger i en annan mapp måste du ange rätt sökväg.

Läs JSON-filen i Python.

I nästa avsnitt ska vi undersöka hur man skriver till en JSON-fil. ✍

Skriva till en JSON-fil i Python

För att skriva till en existerande JSON-fil, eller skapa en ny, används metoden dump() enligt följande:

json.dump(<ordboks_objekt>,<json_fil>)

# where <ordboks_objekt> is a Python dictionary 

# and <json_fil> is the JSON file 

Syntaxen ovan ”dumpar” ordboken <ordboks_objekt> till JSON-filen <json_fil>.

I det föregående avsnittet hade vi ordboken py_dict. Låt oss nu skriva ut den till en ny JSON-fil, new_file.json.

Koden nedan visar hur du kan använda funktionen dump():

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

Obs: När en fil öppnas i skrivläge ('w') kommer filens befintliga innehåll att skrivas över om filen redan finns. Om filen inte finns skapas den.

Efter att ha kört koden kommer du att se att en ny JSON-fil har skapats i din arbetskatalog. Nu kan du utforska JSON-filens innehåll.

Skapa JSON-fil i Python.

När du skriver till filer är datalagring det huvudsakliga syftet. Om du vill behålla formateringen kan parametrarna indent och sort_keys användas.

Sammanfattning

⏲️ Låt oss ta en kort sammanfattning av det vi har gått igenom.

I den här handledningen har du lärt dig:

  • Grunderna i att använda JSON.
  • Att använda loads() och load() för att läsa JSON-strängar respektive JSON-filer.
  • Att använda dumps() och dump() för att konvertera Python-ordböcker till JSON-strängar respektive JSON-filer.

Jag hoppas att du tyckte att den här handledningen var användbar. Lycka till med ditt lärande! ✨

Du kan också undersöka JSON-verktyg för att analysera, formatera och validera JSON-data.