Python JSON: Koda (dumpa), Avkoda (ladda) json Data & Fil (exempel)

Innehållsförteckning:

Anonim

Vad är JSON?

JSON är ett standardformat för datautbyte, som är inspirerat av JavaScript. Generellt är JSON i sträng- eller textformat. JSON står för J ava S cript O bject N otation.

Syntaksen för JSON: JSON skrivs som nyckel- och värdepar.

{"Key": "Value","Key": "Value",}

JSON liknar mycket Python-ordlistan. Python stöder JSON, och det har ett inbyggt bibliotek som en JSON.

JSON-biblioteket i Python

' Marshal ' och ' pickle' externa moduler av Python underhåller en version av JSON- biblioteket. För att utföra JSON-relaterade operationer som kodning och avkodning i Python måste du först importera JSON-biblioteket och för det i din .py- fil,

import json

Följande metoder finns tillgängliga i JSON-modulen

Metod Beskrivning
dumpar () kodning till JSON-objekt
dumpa() kodad strängskrivning på fil
massor() Avkoda JSON-strängen
ladda() Avkoda medan JSON-filen läses

Python till JSON (kodning)

JSON Library of Python utför som standard följande översättning av Python-objekt till JSON-objekt

Pytonorm JSON
diktera Objekt
lista Array
unicode Sträng
nummer - int, lång nummer - int
flyta nummer - verkligt
Sann Sann
Falsk Falsk
Ingen Null

Omvandla Python-data till JSON kallas en kodningsoperation. Kodning görs med hjälp av JSON-biblioteksmetoden - dumpar ()

dumps () -metoden konverterar pythons ordboksobjekt till JSON-strängdataformat.

Nu kan vi utföra vårt första kodningsexempel med Python.

import jsonx = {"name": "Ken","age": 45,"married": True,"children": ("Alice","Bob"),"pets": ['Dog'],"cars": [{"model": "Audi A1", "mpg": 15.1},{"model": "Zeep Compass", "mpg": 18.1}]}# sorting result in asscending order by keys:sorted_string = json.dumps(x, indent=4, sort_keys=True)print(sorted_string)

Produktion:

{"person": {"name": "Kenn", "sex": "male", "age": 28}})

Låt oss skapa en JSON-fil av ordboken med samma funktionsdump ()

# here we create new data_file.json file with write mode using file i/o operationwith open('json_file.json', "w") as file_write:# write json data into filejson.dump(person_data, file_write)

Produktion:

Inget att visa

... I ditt system json_file.json skapas kan du kontrollera den filen.

JSON till Python (avkodning)

JSON-strängavkodning görs med hjälp av inbyggda metodladdningar () & belastning () av JSON-biblioteket i Python. Här visar översattabellen exempel på JSON-objekt till Python-objekt som är till hjälp för avkodning i Python av JSON-sträng.

JSON Pytonorm
Objekt diktera
Array lista
Sträng unicode
nummer - int nummer - int, lång
nummer - verkligt flyta
Sann Sann
Falsk Falsk
Null Ingen

Låt oss se ett grundläggande exempel på avkodning i Python med hjälp av json.loads () -funktionen,

import json # json library imported# json data stringperson_data = '{ "person": { "name": "Kenn", "sex": "male", "age": 28}}'# Decoding or converting JSON format in dictionary using loads()dict_obj = json.loads(person_data)print(dict_obj)# check type of dict_objprint("Type of dict_obj", type(dict_obj))# get human object detailsprint("Person… ", dict_obj.get('person'))

Produktion:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}Type of dict_obj Person… {'name': 'John', 'sex': 'male'}

Avkodning av JSON-fil eller analysering av JSON-fil i Python

OBS: Avkodning av JSON-fil är filinmatning / utdata (I / O) -relaterad operation. JSON-filen måste finnas på ditt system på den angivna platsen som du nämner i ditt program.

Exempel,

import json#File I/O Open function for read data from JSON Filewith open('X:/json_file.json') as file_object:# store file data in objectdata = json.load(file_object)print(data)

Här är data ett ordbokobjekt för Python.

Produktion:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}

Kompakt kodning i Python

När du behöver minska storleken på din JSON-fil kan du använda kompakt kodning i Python.

Exempel,

import json# Create a List that contains dictionarylst = ['a', 'b', 'c',{'4': 5, '6': 7}]# separator used for compact representation of JSON.# Use of ',' to identify list items# Use of ':' to identify key and value in dictionarycompact_obj = json.dumps(lst, separators=(',', ':'))print(compact_obj)

Produktion:

'["a", "b", "c", {"4": 5, "6": 7}]'** Here output of JSON is represented in a single line which is the most compact representation by removing the space character from compact_obj ** 

Formatera JSON-kod (vackert utskrift)

  • Målet är att skriva välformaterad kod för mänsklig förståelse. Med hjälp av vacker utskrift kan vem som helst lätt förstå koden.
  • Exempel,
import jsondic = { 'a': 4, 'b': 5 }''' To format the code use of indent and 4 shows number of space and use of separator is not necessary but standard way to write code of particular function. '''formatted_obj = json.dumps(dic, indent=4, separators=(',', ': '))print(formatted_obj)

Produktion:

{"a" : 4,"b" : 5}

För att bättre förstå detta ändrar du indrag till 40 och observerar utdata-

Beställa JSON-koden:

sort_keys- attributet i dumps () -funktionens argument sorterar nyckeln i JSON i stigande ordning. Argumentet sort_keys är ett booleskt attribut. När det är sant är sortering tillåten annars inte

Exempel,

import jsonx = {"name": "Ken","age": 45,"married": True,"children": ("Alice", "Bob"),"pets": [ 'Dog' ],"cars": [{"model": "Audi A1", "mpg": 15.1},{"model": "Zeep Compass", "mpg": 18.1}],}# sorting result in asscending order by keys:sorted_string = json.dumps(x, indent=4, sort_keys=True)print(sorted_string)

Produktion:

{"age": 45,"cars": [ {"model": "Audi A1","mpg": 15.1},{"model": "Zeep Compass","mpg": 18.1}],"children": [ "Alice","Bob"],"married": true,"name": "Ken","pets": ["Dog"]}

Som du kan observera nycklarnas ålder är bilar, barn osv ordnade i stigande ordning.

Komplex objektkodning av Python

Ett komplext objekt har två olika delar

  1. Verklig del
  2. Imaginär del

Exempel: 3 + 2i

Innan du utför kodning av ett komplext objekt måste du kontrollera att en variabel är komplex eller inte. Du måste skapa en funktion som kontrollerar värdet som lagras i en variabel med hjälp av en instansmetod.

Låt oss skapa den specifika funktionen för kontrollobjekt är komplex eller kvalificerad för kodning.

import json# create function to check instance is complex or notdef complex_encode(object):# check using isinstance methodif isinstance(object, complex):return [object.real, object.imag]# raised error using exception handling if object is not complexraise TypeError(repr(object) + " is not JSON serialized")# perform json encoding by passing parametercomplex_obj = json.dumps(4 + 5j, default=complex_encode)print(complex_obj)

Produktion:

'[4.0, 5.0]'

Komplex avkodning av JSON-objekt i Python

För att avkoda komplexa objekt i JSON, använd en parameter_hook-parameter som kontrollerar att JSON-strängen innehåller det komplexa objektet eller inte. Exempel,

import json# function check JSON string contains complex objectdef is_complex(objct):if '__complex__' in objct:return complex(objct['real'], objct['img'])return objct# use of json loads method with object_hook for check object complex or notcomplex_object =json.loads('{"__complex__": true, "real": 4, "img": 5}', object_hook = is_complex)#here we not passed complex object so it's convert into dictionarysimple_object =json.loads('{"real": 6, "img": 7}', object_hook = is_complex)print("Complex_object… ",complex_object)print("Without_complex_object… ",simple_object)

Produktion:

Complex_object… (4+5j)Without_complex_object… {'real': 6, 'img': 7}

Översikt över JSON Serialization-klass JSONEncoder

JSONEncoder-klassen används för serialisering av alla Python-objekt medan kodning utförs. Den innehåller tre olika kodningsmetoder som är

  • standard (o) - Implementerad i underklassen och returnera serialiseringsobjekt för o- objekt.
  • kod (o) - Samma som metoden json.dumps () returnerar JSON-strängen i Python-datastrukturen.
  • iterencode (o) - representera sträng en efter en och koda objekt o.

Med hjälp av encode () -metoden för JSONEncoder-klassen kan vi också koda vilket Python-objekt som helst.

# import JSONEncoder class from jsonfrom json.encoder import JSONEncodercolour_dict = { "colour": ["red", "yellow", "green" ]}# directly called encode method of JSONJSONEncoder().encode(colour_dict)

Produktion:

'{"colour": ["red", "yellow", "green"]}'

Översikt över JSON Deserialization-klass JSONDecoder

JSONDecoder-klassen används för deserialisering av alla Python-objekt medan avkodning utförs. Den innehåller tre olika metoder för avkodning som är

  • standard (o) - Implementerad i underklassen och returnera deserialiserat objekt o objekt.
  • avkoda (o) - Samma som metoden json.loads () returnerar Python-datastruktur för JSON-sträng eller data.
  • raw_decode (o) - Representera Python-ordlistan en efter en och avkoda objekt o.

Med hjälp av metoden för avkodning () av ​​JSONDecoder-klassen kan vi också avkoda JSON-sträng.

import json# import JSONDecoder class from jsonfrom json.decoder import JSONDecodercolour_string = '{ "colour": ["red", "yellow"]}'# directly called decode method of JSONJSONDecoder().decode(colour_string)

Produktion:

{'colour': ['red', 'yellow']}

Avkodning av JSON-data från URL: Exempel på verkligt liv

Vi hämtar data från CityBike NYC (Bike Sharing System) från angiven URL (https://feeds.citibikenyc.com/stations/stations.json) och konverterar till ordboksformat.

Exempel,

OBS: - Se till att förfrågningsbiblioteket redan är installerat i din Python, om inte, öppna sedan Terminal eller CMD och skriv

  • (För Python 3 eller högre ) pip3 installationsförfrågningar
import jsonimport requests# get JSON string data from CityBike NYC using web requests libraryjson_response= requests.get("https://feeds.citibikenyc.com/stations/stations.json")# check type of json_response objectprint(type(json_response.text))# load data in loads() function of json librarybike_dict = json.loads(json_response.text)#check type of news_dictprint(type(bike_dict))# now get stationBeanList key data from dictprint(bike_dict['stationBeanList'][0])

Produktion:

{'id': 487,'stationName': 'E 20 St & FDR Drive','availableDocks': 24,'totalDocks': 34,'latitude': 40.73314259,'longitude': -73.97573881,'statusValue': 'In Service','statusKey': 1,'availableBikes': 9,'stAddress1': 'E 20 St & FDR Drive','stAddress2': '','city': '','postalCode': '','location': '','altitude': '','testStation': False,'lastCommunicationTime': '2018-12-11 10:59:09 PM', 'landMark': ''}

Undantag relaterade till JSON-biblioteket i Python:

  • Klass json.JSONDecoderError hanterar undantaget relaterat till avkodning. och det är en underklass av ValueError.
  • Undantag - json.JSONDecoderError (msg, doc)
  • Parametrar för undantag är,
    • msg - Oformaterat felmeddelande
    • doc - JSON docs analyseras
    • pos - start index för doc när det misslyckades
    • lineno-line inga utställningar motsvarar pos
    • kolon - kolumn nr motsvarar pos

Exempel,

import json#File I/O Open function for read data from JSON Filedata = {} #Define Empty Dictionary Objecttry:with open('json_file_name.json') as file_object:data = json.load(file_object)except ValueError:print("Bad JSON file format, Change JSON File")

Oändliga och NaN-nummer i Python

JSON Data Interchange Format (RFC - Request For Comments) tillåter inte oändligt eller nanvärde men det finns ingen begränsning i Python-JSON-biblioteket för att utföra oändlig och nanvärderad operation. Om JSON får INFINITE och Nan datatyp än omvandlas det till bokstavligt.

Exempel,

import json# pass float Infinite valueinfinite_json = json.dumps(float('inf'))# check infinite json typeprint(infinite_json)print(type(infinite_json))json_nan = json.dumps(float('nan'))print(json_nan)# pass json_string as Infinityinfinite = json.loads('Infinity')print(infinite)# check type of Infinityprint(type(infinite))

Produktion:

InfinityNaNinf

Upprepad nyckel i JSON-sträng

RFC anger att nyckelnamnet ska vara unikt i ett JSON-objekt, men det är inte obligatoriskt. Python JSON-biblioteket tar inte upp ett undantag för upprepade objekt i JSON. Det ignorerar allt upprepat nyckel-värdepar och tar endast hänsyn till det sista nyckel-värdeparet bland dem.

  • Exempel,
import jsonrepeat_pair = '{"a": 1, "a": 2, "a": 3}'json.loads(repeat_pair)

Produktion:

{'a': 3}

CLI (Command Line Interface) med JSON i Python

json.tool tillhandahåller kommandoradsgränssnittet för att validera JSON syntax för ganska utskrift. Låt oss se ett exempel på CLI

$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool

Produktion:

{"name": " Kings Authur "}

Fördelar med JSON i Python

  • Lätt att flytta tillbaka mellan container och värde (JSON till Python och Python till JSON)
  • Mänskligt läsbart (snyggt) JSON-objekt
  • Används ofta i datahantering.
  • Har inte samma datastruktur i den ena filen.

Implementeringsbegränsning för JSON i Python

  • I deserializer av JSON-intervallet och förutsägelse av ett nummer
  • Den maximala längden på JSON-strängen och matriser av JSON och häckande nivåer av objekt.

Fusk kod

json.dumps (person_data)

Skapa JSON-objekt

json.dump (persondata, filskrivare)

Skapa JSON-fil med fil I / O för Python

compact_obj = json.dumps (data, separatorer = (',', ':'))

Kompakt JSON-objekt genom att ta bort mellanslagstecken från JSON-objekt med separator

formatted_obj = json.dumps (dic, indent = 4, separators = (',', ':'))

Formatera JSON-kod med indrag

sorted_string = json.dumps (x, indent = 4, sort_keys = True)

Sorterar JSON-objektnyckel i alfabetisk ordning

complex_obj = json.dumps (4 + 5j, standard = complex_encode)

Python Complex Object-kodning i JSON

JSONEncoder (). Kod (colour_dict)

Användning av JSONEncoder-klass för serialisering

json.loads (data_string)

Avkodning av JSON-sträng i Python-ordlistan med funktionen json.loads ()

json.loads ('{"__ complex__": true, "real": 4, "img": 5}', object_hook = is_complex)

Avkodning av komplexa JSON-objekt till Python

JSONDecoder (). Avkoda (colour_string)

Användning av avkodning av JSON till Python med deserialisering