Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Python

Python JSON:coderen (dumps), decoderen (laden) &JSON-bestand lezen

Wat is JSON in Python?

JSON in Python is een standaardformaat geïnspireerd op JavaScript voor gegevensuitwisseling en gegevensoverdracht als tekstformaat via een netwerk. Over het algemeen is JSON in tekenreeks- of tekstindeling. Het kan worden gebruikt door API's en databases, en het vertegenwoordigt objecten als naam/waarde-paren. JSON staat voor JavaScript Object Notation.

Python JSON-syntaxis:

JSON wordt geschreven als sleutel- en waardepaar.

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

JSON lijkt erg op Python-woordenboek. Python ondersteunt JSON en heeft een ingebouwde bibliotheek als JSON.

JSON-bibliotheek in Python

'maarschalk ' en 'augurk' externe modules van Python onderhouden een versie van JSON Python-bibliotheek. Als u met JSON in Python werkt om JSON-gerelateerde bewerkingen uit te voeren, zoals coderen en decoderen, moet u eerst importeren JSON-bibliotheek en daarvoor in uw .py bestand,

import json

De volgende methoden zijn beschikbaar in de JSON Python-module

Methode Beschrijving
dumps() codering naar JSON-objecten
dump() gecodeerde tekenreeks naar bestand
laadt() Decodeer de JSON-tekenreeks
load() Decoderen terwijl het JSON-bestand wordt gelezen

Python naar JSON (codering)

JSON Library of Python voert standaard de volgende vertaling uit van Python-objecten naar JSON-objecten

Python JSON
dict Object
lijst Array
unicode String
getal – int, lang nummer – int
zweven getal – echt
Waar Waar
Onwaar Fout
Geen Null

Het converteren van Python-gegevens naar JSON wordt een coderingsbewerking genoemd. De codering wordt gedaan met behulp van de JSON-bibliotheekmethode - dumps()

JSON dumpt() in Python

json.dumps() in Python is een methode die woordenboekobjecten van Python omzet in JSON-tekenreeksgegevensformaat. Het is handig wanneer de objecten in tekenreeksformaat moeten zijn voor bewerkingen zoals parseren, afdrukken, enz.

Laten we nu ons eerste json.dumps-coderingsvoorbeeld met Python uitvoeren:

import json

x = {
  "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)

Uitvoer:

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

Laten we een voorbeeld bekijken van Python die JSON naar een bestand schrijft om een ​​JSON-bestand van het woordenboek te maken met dezelfde functie dump()

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

Uitvoer:

Niets om te laten zien... In uw systeem wordt json_file.json aangemaakt. U kunt dat bestand controleren zoals weergegeven in het onderstaande voorbeeld van een schrijf-JSON naar Python-bestand.

JSON naar Python (decodering)

JSON-tekenreeksdecodering wordt gedaan met behulp van de ingebouwde methode json.loads() &json.load() van de JSON-bibliotheek in Python. Hier toont de vertaaltabel een voorbeeld van JSON-objecten naar Python-objecten die handig zijn om decodering in Python van JSON-tekenreeks uit te voeren.

JSON Python
Object dict
Array lijst
String unicode
nummer – int getal – int, lang
getal – echt zweven
Waar Waar
Onwaar Fout
Null Geen

Laten we een eenvoudig JSON-python-voorbeeld van decodering bekijken met behulp van json.loads functie,

import json  # json library imported
# json data string
person_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_obj
print("Type of dict_obj", type(dict_obj))
# get human object details
print("Person......",  dict_obj.get('person'))

Uitvoer:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Type of dict_obj <class 'dict'>
Person...... {'name': 'John', 'sex': 'male'}

JSON-bestand decoderen of JSON-bestand parseren in Python

Nu zullen we leren hoe we het JSON-bestand in Python kunnen lezen met het Python-parse JSON-voorbeeld:

OPMERKING: Het decoderen van het JSON-bestand is een aan File Input/Output (I/O) gerelateerde bewerking. Het JSON-bestand moet op uw systeem aanwezig zijn op de opgegeven locatie die u in uw programma vermeldt.

Python leest JSON-bestand Voorbeeld:

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

Hier gegevens is een woordenboekobject van Python, zoals weergegeven in het bovenstaande voorbeeld van het gelezen JSON-bestand Python.

Uitvoer:

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

Compacte codering in Python

Als u de grootte van uw JSON-bestand wilt verkleinen, kunt u compacte codering in Python gebruiken.

Voorbeeld,

import json
# Create a List that contains dictionary
lst = ['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 dictionary
compact_obj = json.dumps(lst, separators=(',', ':'))
print(compact_obj)

Uitvoer:

'["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 **

Formaat JSON-code (mooie print)

  • Het doel is om goed geformatteerde code te schrijven voor menselijk begrip. Met behulp van mooie afdrukken kan iedereen de code gemakkelijk begrijpen.

Voorbeeld:

import json
dic = { '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)

Uitvoer:

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

Om dit beter te begrijpen, wijzigt u de inspringing in 40 en bekijkt u de uitvoer-

De JSON-code bestellen:

sort_keys attribuut in Python dumps function's argument sorteert de sleutel in JSON in oplopende volgorde. Het argument sort_keys is een Booleaans attribuut. Als het waar is, is sorteren toegestaan, anders niet. Laten we het eens begrijpen met Python-string naar JSON-sorteervoorbeeld.

Voorbeeld,

import json

x = {
  "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)

Uitvoer:

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

Zoals u kunt zien, zijn de leeftijd van de sleutels, auto's, kinderen, enz. in oplopende volgorde gerangschikt.

Complexe objectcodering van Python

Een Complex object heeft twee verschillende delen, namelijk

  1. Echt deel
  2. Imaginair deel

Voorbeeld:3 +2i

Voordat u een complex object codeert, moet u controleren of een variabele complex is of niet. U moet een functie maken die de waarde controleert die is opgeslagen in een variabele met behulp van een instantiemethode.

Laten we de specifieke functie maken voor het controleren van objecten die complex zijn of in aanmerking komen voor codering.

import json

# create function to check instance is complex or not
def complex_encode(object):
    # check using isinstance method
    if isinstance(object, complex):
        return [object.real, object.imag]
    # raised error using exception handling if object is not complex
    raise TypeError(repr(object) + " is not JSON serialized")


# perform json encoding by passing parameter
complex_obj = json.dumps(4 + 5j, default=complex_encode)
print(complex_obj)

Uitvoer:

'[4.0, 5.0]'

Complexe JSON-objectdecodering in Python

Om een ​​complex object in JSON te decoderen, gebruikt u een parameter object_hook die controleert of de JSON-tekenreeks het complexe object bevat of niet. Laten we het begrijpen met string naar JSON Python-voorbeeld,

import json
  # function check JSON string contains complex object
  def 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 not
  complex_object =json.loads('{"__complex__": true, "real": 4, "img": 5}', object_hook = is_complex)
  #here we not passed complex object so it's convert into dictionary
  simple_object =json.loads('{"real": 6, "img": 7}', object_hook = is_complex)
  print("Complex_object......",complex_object)
  print("Without_complex_object......",simple_object)

Uitvoer:

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

Overzicht van JSON-serialisatieklasse JSONEncoder

De JSONEncoder-klasse wordt gebruikt voor serialisatie van elk Python-object tijdens het uitvoeren van codering. Het bevat drie verschillende coderingsmethoden die zijn

  • standaard(o) – Geïmplementeerd in de subklasse en return serialize object voor o voorwerp.
  • coderen(o) - Hetzelfde als JSON dumpt Python-methode retourneert JSON-tekenreeks van Python-gegevensstructuur.
  • iterencode(o) – Vertegenwoordig string één voor één en codeer object o.

Met behulp van de methode encode() van de JSONEncoder-klasse, kunnen we ook elk Python-object coderen, zoals weergegeven in het onderstaande Python JSON-encodervoorbeeld.

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

Uitvoer:

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

Overzicht van JSON-deserialisatieklasse JSONDecoder

De JSONDecoder-klasse wordt gebruikt voor deserialisatie van elk Python-object tijdens het decoderen. Het bevat drie verschillende decoderingsmethoden die zijn

  • standaard(o) – Geïmplementeerd in de subklasse en geeft gedeserialiseerd object terug o voorwerp.
  • decoderen(o) – Zelfde als json.loads() methode retourneert Python datastructuur van JSON string of data.
  • raw_decode(o) – Vertegenwoordig het Python-woordenboek één voor één en decodeer object o.

Met behulp van de methode decode() van de JSONDecoder-klasse, kunnen we ook de JSON-tekenreeks decoderen, zoals weergegeven in het onderstaande Python JSON-decodervoorbeeld.

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

Uitvoer:

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

JSON-gegevens decoderen van URL:voorbeeld uit de praktijk

We halen de gegevens van CityBike NYC (Bike Sharing System) op van de opgegeven URL (https://feeds.citibikenyc.com/stations/stations.json) en zetten deze om in woordenboekformaat.

Python laadt JSON uit bestand Voorbeeld:

OPMERKING:- Zorg ervoor dat de aanvraagbibliotheek al in uw Python is geïnstalleerd. Zo niet, open dan Terminal of CMD en typ

  • (Voor Python 3 of hoger) pip3-installatieverzoeken
import json
import requests

# get JSON string data from CityBike NYC using web requests library
json_response= requests.get("https://feeds.citibikenyc.com/stations/stations.json")
# check type of json_response object
print(type(json_response.text))
# load data in loads() function of json library
bike_dict = json.loads(json_response.text)
#check type of news_dict
print(type(bike_dict))
# now get stationBeanList key data from dict
print(bike_dict['stationBeanList'][0]) 

Uitvoer:

<class 'str'>
<class 'dict'>
{
	'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': ''
}

Uitzonderingen gerelateerd aan JSON-bibliotheek in Python:

  • Klasse json.JSONDecoderError behandelt de uitzondering met betrekking tot decoderingsbewerking. en het is een subklasse van ValueError.
  • Uitzondering – json.JSONDecoderError(msg, doc)
  • Uitzonderingsparameters zijn,
    • msg – Ongeformatteerde foutmelding
    • doc – JSON-documenten geparseerd
    • pos – start index van doc wanneer het is mislukt
    • lineno – regel geen shows komen overeen met pos
    • dubbele punt – kolom komt niet overeen met pos

Python laadt JSON uit bestand Voorbeeld:

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

Oneindige en NaN-getallen in Python

JSON Data Interchange Format (RFC – Request For Comments) staat geen Infinite of Nan Value toe, maar er is geen beperking in Python-JSON Library om Infinite en Nan Value-gerelateerde bewerkingen uit te voeren. Als JSON het gegevenstype INFINITE en Nan krijgt, wordt het omgezet naar letterlijk.

Voorbeeld,

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

Uitvoer:

Infinity
<class 'str'>
NaN
inf
<class 'float'>	

Herhaalde sleutel in JSON String

RFC geeft aan dat de sleutelnaam uniek moet zijn in een JSON-object, maar het is niet verplicht. Python JSON-bibliotheek roept geen uitzondering op voor herhaalde objecten in JSON. Het negeert alle herhaalde sleutel-waarde-paren en houdt alleen rekening met het laatste sleutel-waarde-paar.

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

Uitvoer:

{'a': 3}

CLI (Command Line Interface) met JSON in Python

json.tool biedt de opdrachtregelinterface om de JSON pretty-print-syntaxis te valideren. Laten we een voorbeeld van CLI bekijken

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

Uitvoer:

{
    "name": " Kings Authur "
}

Voordelen van JSON in Python

  • Eenvoudig terug te schakelen tussen container en waarde (JSON naar Python en Python naar JSON)
  • Voor mensen leesbaar (Pretty-print) JSON-object
  • Veel gebruikt bij gegevensverwerking.
  • Heeft niet dezelfde gegevensstructuur in het enkele bestand.

Implementatiebeperkingen van JSON in Python

  • In deserializer van JSON-bereik en voorspelling van een getal
  • De maximale lengte van JSON-tekenreeksen en arrays van JSON en nestingniveaus van objecten.

Python JSON-spiekbriefje

Python JSON-functie Beschrijving
json.dumps(person_data) JSON-object maken
json.dump(person_data, file_write) JSON-bestand maken met behulp van bestands-I/O van Python
compact_obj =json.dumps(data, separators=(‘,’,’:’)) Compact JSON-object door spatie uit JSON-object te verwijderen met behulp van scheidingsteken
formatted_obj =json.dumps(dic, indent=4, separators=(‘,’, ‘:‘)) JSON-code opmaken met Indent
sorted_string =json.dumps(x, indent=4, sort_keys=True) JSON-objectsleutel sorteren op alfabetische volgorde
complex_obj =json.dumps(4 + 5j, default=complex_encode) Python Complex Object-codering in JSON
JSONEncoder().encode(colour_dict) Gebruik van JSONEncoder-klasse voor serialisatie
json.loads(data_string) JSON-tekenreeks decoderen in Python-woordenboek met de functie json.loads()
json.loads(‘{“__complex__”:true, “real”:4, “img”:5}’, object_hook =is_complex) Decodering van complex JSON-object naar Python
JSONDecoder().decode(colour_string) Gebruik van decodering van JSON naar Python met deserialisatie

Python

  1. Python-gegevenstypen
  2. Python-operators
  3. Python while Loop
  4. Python pass-instructie
  5. Python-functies
  6. Python-functieargumenten
  7. Python-woordenboek
  8. Python-bestand I/O
  9. Java BufferedReader:hoe een bestand in Java te lezen met voorbeeld
  10. Python controleren of bestand bestaat | Hoe te controleren of er een directory bestaat in Python
  11. Python - Bestanden I/O