Python JSON: Encode (dumps), Decode (loads) & Read File JSON

Σε τι είναι το JSON Python?

JSON in Python είναι μια τυπική μορφή εμπνευσμένη από JavaΣενάριο για ανταλλαγή δεδομένων και μεταφορά δεδομένων ως μορφή κειμένου μέσω δικτύου. Γενικά, το JSON είναι σε μορφή συμβολοσειράς ή κειμένου. Μπορεί να χρησιμοποιηθεί από API και βάσεις δεδομένων και αντιπροσωπεύει αντικείμενα ως ζεύγη ονόματος/τιμής. Το JSON σημαίνει JavaΣημειογραφία αντικειμένου σεναρίου.

Python Σύνταξη JSON:

Το JSON γράφεται ως ζεύγος κλειδιού και τιμής.

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

Το JSON μοιάζει πολύ με Python λεξικό. Python υποστηρίζει JSON και έχει μια ενσωματωμένη βιβλιοθήκη ως JSON.

JSON Library in Python

»διευθετώ'Και'πίκλα' εξωτερικές ενότητες του Python διατηρούν μια έκδοση του JSON Python βιβλιοθήκη. Εργασία με JSON σε Python για να εκτελέσετε λειτουργίες που σχετίζονται με JSON, όπως κωδικοποίηση και αποκωδικοποίηση, πρέπει πρώτα να το κάνετε εισαγωγή βιβλιοθήκη JSON και για αυτό στη δική σας .py αρχείου,

import json

Οι ακόλουθες μέθοδοι είναι διαθέσιμες στο JSON Python ενότητα

Μέθοδος Περιγραφή
κατήφεια() κωδικοποίηση σε αντικείμενα JSON
εγκαταλείπω() κωδικοποιημένη εγγραφή συμβολοσειράς σε αρχείο
φορτία () Αποκωδικοποιήστε τη συμβολοσειρά JSON
φορτώνω() Αποκωδικοποίηση κατά την ανάγνωση του αρχείου JSON

Python σε JSON (Κωδικοποίηση)

JSON Βιβλιοθήκη του Python εκτελεί την ακόλουθη μετάφραση του Python αντικείμενα σε αντικείμενα JSON από προεπιλογή

Python JSON
dict αντικείμενο
λίστα Παράταξη
unicode Σπάγγος
αριθμός – int, long αριθμός – ενθ
φλοτέρ αριθμός – πραγματικός
Οι αληθινοί Οι αληθινοί
Ψευδής Ψευδής
Ν/Α Null

Μετατροπή Python Τα δεδομένα σε JSON ονομάζονται λειτουργία κωδικοποίησης. Η κωδικοποίηση γίνεται με τη βοήθεια της μεθόδου βιβλιοθήκης JSON – κατήφεια()

JSON dumps() σε Python

json.dumps() in Python είναι μια μέθοδος που μετατρέπει αντικείμενα λεξικού του Python σε μορφή δεδομένων συμβολοσειράς JSON. Είναι χρήσιμο όταν τα αντικείμενα απαιτείται να είναι σε μορφή συμβολοσειράς για λειτουργίες όπως ανάλυση, εκτύπωση κ.λπ.

Τώρα ας εκτελέσουμε το πρώτο μας παράδειγμα κωδικοποίησης json.dumps με Python:

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)

Παραγωγή:

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

Ας δούμε ένα παράδειγμα του Python γράψτε JSON στο αρχείο για τη δημιουργία ενός αρχείου JSON του λεξικού χρησιμοποιώντας την ίδια λειτουργία εγκαταλείπω()

# 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)

Παραγωγή:

Δεν υπάρχει τίποτα για εμφάνιση…Στο σύστημά σας δημιουργείται το json_file.json. Μπορείτε να ελέγξετε αυτό το αρχείο όπως φαίνεται στην παρακάτω εγγραφή JSON σε αρχείο Python παράδειγμα.

Python Παράδειγμα κωδικοποίησης JSON

JSON σε Python (Αποκρυπτογράφηση)

Η αποκωδικοποίηση συμβολοσειρών JSON γίνεται με τη βοήθεια της ενσωματωμένης μεθόδου json.loads() & json.load() της βιβλιοθήκης JSON στο Python. Εδώ ο πίνακας μετάφρασης δείχνει παράδειγμα αντικειμένων JSON σε Python αντικειμένων που είναι χρήσιμα για την αποκωδικοποίηση Python της συμβολοσειράς JSON.

JSON Python
αντικείμενο dict
Παράταξη λίστα
Σπάγγος unicode
αριθμός – ενθ αριθμός – int, long
αριθμός – πραγματικός φλοτέρ
Οι αληθινοί Οι αληθινοί
Ψευδής Ψευδής
Null Ν/Α

Ας δούμε μια βασική ανάλυση JSON Python παράδειγμα αποκωδικοποίησης με τη βοήθεια του json.loads λειτουργία,

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'))

Παραγωγή:

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

Python Παράδειγμα αποκωδικοποίησης JSON

Αποκωδικοποίηση αρχείου JSON ή ανάλυση αρχείου JSON σε Python

Τώρα, θα μάθουμε πώς να διαβάζουμε το αρχείο JSON Python μαζί σου, Python Παράδειγμα ανάλυσης JSON:

ΣΗΜΕΊΩΣΗ: Η αποκωδικοποίηση του αρχείου JSON είναι λειτουργία που σχετίζεται με την Εισαγωγή/Έξοδο αρχείου (I/O). Το αρχείο JSON πρέπει να υπάρχει στο σύστημά σας στην καθορισμένη τοποθεσία που αναφέρετε στο πρόγραμμά σας.

Python Διαβάστε το αρχείο JSON Παράδειγμα:

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)

Εδώ δεδομένα είναι αντικείμενο λεξικού του Python όπως φαίνεται στο παραπάνω αναγνωσμένο αρχείο JSON Python παράδειγμα.

Παραγωγή:

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

Ανάλυση αρχείου JSON σε Python

Συμπαγής κωδικοποίηση σε Python

Όταν πρέπει να μειώσετε το μέγεθος του αρχείου JSON, μπορείτε να χρησιμοποιήσετε συμπαγή κωδικοποίηση Python.

Παράδειγμα,

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)

Παραγωγή:

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

Μορφοποίηση κώδικα JSON (όμορφη εκτύπωση)

  • Ο στόχος είναι να γραφεί καλά διαμορφωμένος κώδικας για την ανθρώπινη κατανόηση. Με τη βοήθεια της όμορφης εκτύπωσης, ο καθένας μπορεί εύκολα να καταλάβει τον κώδικα.

Παράδειγμα:

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)

Παραγωγή:

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

Μορφοποίηση κώδικα JSON Παράδειγμα

Για να το κατανοήσετε καλύτερα αυτό, αλλάξτε την εσοχή σε 40 και παρατηρήστε την έξοδο-

Μορφοποίηση κώδικα JSON Παράδειγμα

Παραγγελία του κωδικού JSON:

πλήκτρα ταξινόμησης χαρακτηριστικό σε Python Το όρισμα της συνάρτησης dumps θα ταξινομήσει το κλειδί σε JSON σε αύξουσα σειρά. Το όρισμα sort_keys είναι ένα Boolean χαρακτηριστικό. Όταν είναι αληθινή η ταξινόμηση επιτρέπεται διαφορετικά όχι. Ας καταλάβουμε με Python Παράδειγμα ταξινόμησης συμβολοσειράς σε JSON.

Παράδειγμα,

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)

Παραγωγή:

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

Όπως μπορείτε να παρατηρήσετε τα κλειδιά ηλικίας, τα αυτοκίνητα, τα παιδιά κ.λπ. είναι διατεταγμένα σε αύξουσα σειρά.

Κωδικοποίηση σύνθετου αντικειμένου του Python

Ένα σύνθετο αντικείμενο έχει δύο διαφορετικά μέρη δηλαδή

  1. Πραγματικό μέρος
  2. Φανταστικό μέρος

Κωδικοποίηση σύνθετου αντικειμένου του Python

Παράδειγμα: 3 +2i

Πριν εκτελέσετε κωδικοποίηση ενός σύνθετου αντικειμένου, πρέπει να ελέγξετε ότι μια μεταβλητή είναι σύνθετη ή όχι. Πρέπει να δημιουργήσετε μια συνάρτηση που ελέγχει την τιμή που είναι αποθηκευμένη σε μια μεταβλητή χρησιμοποιώντας μια μέθοδο παρουσίας.

Ας δημιουργήσουμε τη συγκεκριμένη συνάρτηση για έλεγχο αντικείμενο είναι σύνθετο ή κατάλληλο για κωδικοποίηση.

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)

Παραγωγή:

'[4.0, 5.0]'

Σύνθετο αντικείμενο JSON σε αποκωδικοποίηση Python

Για να αποκωδικοποιήσετε σύνθετο αντικείμενο σε JSON, χρησιμοποιήστε μια παράμετρο object_hook που ελέγχει ότι η συμβολοσειρά JSON περιέχει ή όχι το σύνθετο αντικείμενο. Ας καταλάβουμε με συμβολοσειρά σε JSON Python Παράδειγμα,

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)

Παραγωγή:

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

Επισκόπηση του JSON Serialization class JSONEncoder

Η κλάση JSONEncoder χρησιμοποιείται για σειριοποίηση οποιουδήποτε Python αντικείμενο κατά την εκτέλεση κωδικοποίησης. Περιέχει τρεις διαφορετικές μεθόδους κωδικοποίησης που είναι

  • προεπιλογή(ο) – Υλοποιήθηκε στην υποκλάση και επιστροφή σειριακό αντικείμενο για o αντικείμενο.
  • κωδικοποίηση(ο) – Το ίδιο με τα JSON dumps Python μέθοδος επιστροφής συμβολοσειράς JSON του Python δομή δεδομένων.
  • iterencode(o) – Αντιπροσωπεύστε τη συμβολοσειρά μία προς μία και κωδικοποιήστε το αντικείμενο o.

Με τη βοήθεια της μεθόδου encode() της κλάσης JSONEncoder, μπορούμε επίσης να κωδικοποιήσουμε οποιαδήποτε Python αντικείμενο όπως φαίνεται παρακάτω Python Παράδειγμα κωδικοποιητή JSON.

# 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)

Παραγωγή:

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

Επισκόπηση της κλάσης JSON Deserialization JSONDecoder

Η κλάση JSONDecoder χρησιμοποιείται για την αποσειριοποίηση οποιουδήποτε Python αντικείμενο κατά την εκτέλεση αποκωδικοποίησης. Περιέχει τρεις διαφορετικές μεθόδους αποκωδικοποίησης που είναι

  • προεπιλογή(ο) – Υλοποιήθηκε στην υποκλάση και επιστροφή αποσειρωμένο αντικείμενο o αντικείμενο.
  • αποκωδικοποίηση(ο) – Ίδιο με την επιστροφή της μεθόδου json.loads(). Python δομή δεδομένων συμβολοσειράς ή δεδομένων JSON.
  • raw_decode(o) – Αντιπροσωπεύω Python λεξικό ένα προς ένα και αποκωδικοποιήστε το αντικείμενο o.

Με τη βοήθεια της μεθόδου decode() της κλάσης JSONDecoder, μπορούμε επίσης να αποκωδικοποιήσουμε τη συμβολοσειρά JSON όπως φαίνεται παρακάτω Python Παράδειγμα αποκωδικοποιητή JSON.

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)

Παραγωγή:

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

Αποκωδικοποίηση δεδομένων JSON από τη διεύθυνση URL: Παράδειγμα πραγματικής ζωής

Θα λάβουμε δεδομένα του CityBike NYC (Σύστημα κοινής χρήσης ποδηλάτων) από καθορισμένη διεύθυνση URL(https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) και μετατρέψτε σε μορφή λεξικού.

Python φόρτωση JSON από το αρχείο Παράδειγμα:

ΣΗΜΕΙΩΣΗ: - Βεβαιωθείτε ότι η βιβλιοθήκη αιτημάτων είναι ήδη εγκατεστημένη στη συσκευή σας Python, Εάν όχι, ανοίξτε το Terminal ή CMD και πληκτρολογήστε

  • (Για Python 3 ή παραπάνω) αιτήματα εγκατάστασης pip3
import json
import requests

# get JSON string data from CityBike NYC using web requests library
json_response= requests.get("https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.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]) 

Παραγωγή:

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

Εξαιρέσεις που σχετίζονται με τη βιβλιοθήκη JSON in Python:

  • Τάξη json.JSONDecoderError χειρίζεται την εξαίρεση που σχετίζεται με τη λειτουργία αποκωδικοποίησης. και είναι μια υποκατηγορία του ValueError.
  • Εξαίρεση - json.JSONDecoderError(msg, doc)
  • Οι παράμετροι της εξαίρεσης είναι,
    • msg – Μη μορφοποιημένο μήνυμα σφάλματος
    • doc – Τα έγγραφα JSON αναλύθηκαν
    • pos – έναρξη ευρετηρίου εγγράφου όταν αποτύχει
    • lineno – η γραμμή no δείχνει αντιστοιχεί στη θέση
    • άνω και κάτω τελεία – η στήλη δεν αντιστοιχεί στη θέση

Python φόρτωση JSON από το αρχείο Παράδειγμα:

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")

JSON Library in Python

Άπειρο και NaN Numbers in Python

Η μορφή ανταλλαγής δεδομένων JSON (RFC – Αίτημα για σχόλια) δεν επιτρέπει την άπειρη ή την τιμή Nan, αλλά δεν υπάρχει περιορισμός σε Python- Βιβλιοθήκη JSON για εκτέλεση λειτουργιών που σχετίζονται με Infinite και Nan Value. Εάν το JSON λάβει INFINITE και τύπο δεδομένων Nan, μετατρέπεται σε κυριολεκτικό.

Παράδειγμα,

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))

Παραγωγή:

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

Επαναλαμβανόμενο κλειδί στο JSON String

Το RFC καθορίζει ότι το όνομα κλειδιού πρέπει να είναι μοναδικό σε ένα αντικείμενο JSON, αλλά δεν είναι υποχρεωτικό. Python Η βιβλιοθήκη JSON δεν δημιουργεί εξαίρεση επαναλαμβανόμενων αντικειμένων στο JSON. Αγνοεί όλα τα επαναλαμβανόμενα ζεύγος κλειδιού-τιμής και λαμβάνει υπόψη μόνο το τελευταίο ζεύγος κλειδιού-τιμής μεταξύ τους.

  • Παράδειγμα,
import json
repeat_pair = '{"a":  1, "a":  2, "a":  3}'
json.loads(repeat_pair)

Παραγωγή:

{'a': 3}

CLI (Διεπαφή γραμμής εντολών) με JSON in Python

json.tool παρέχει τη διεπαφή γραμμής εντολών για την επικύρωση της σύνταξης όμορφης εκτύπωσης JSON. Ας δούμε ένα παράδειγμα CLI

Διεπαφή γραμμής εντολών με JSON

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

Παραγωγή:

{
    "name": " Kings Authur "
}

Πλεονεκτήματα του JSON σε Python

  • Εύκολη μετακίνηση μεταξύ κοντέινερ και τιμής (JSON σε Python και Python σε JSON)
  • Αναγνώσιμο από τον άνθρωπο (όμορφη εκτύπωση) Αντικείμενο JSON
  • Χρησιμοποιείται ευρέως στον χειρισμό δεδομένων.
  • Δεν έχει την ίδια δομή δεδομένων στο μεμονωμένο αρχείο.

Περιορισμοί υλοποίησης JSON σε Python

  • Σε αποσειριοποιητή εύρους JSON και πρόβλεψη αριθμού
  • Το μέγιστο μήκος συμβολοσειράς JSON και πίνακες JSON και ένθετα επίπεδα αντικειμένου.

Python Φύλλο εξαπάτησης JSON

Python Λειτουργία JSON Περιγραφή
json.dumps(person_data) Δημιουργία αντικειμένου JSON
json.dump(person_data, file_write) Δημιουργήστε αρχείο JSON χρησιμοποιώντας το File I/O of Python
compact_obj = json.dumps(δεδομένα, διαχωριστικά=(',',':')) Συμπυκνώστε το αντικείμενο JSON αφαιρώντας τον χαρακτήρα διαστήματος από το αντικείμενο JSON χρησιμοποιώντας διαχωριστικό
formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) Μορφοποίηση κώδικα JSON με χρήση εσοχής
sorted_string = json.dumps(x, indent=4, sort_keys=True) Ταξινόμηση κλειδιού αντικειμένου JSON κατά αλφαβητική σειρά
complex_obj = json.dumps(4 + 5j, default=complex_encode) Python Κωδικοποίηση σύνθετου αντικειμένου σε JSON
JSONEncoder().encode(colour_dict) Χρήση της κλάσης JSONEncoder για σειριοποίηση
json.loads(data_string) Αποκωδικοποίηση συμβολοσειράς JSON μέσα Python λεξικό που χρησιμοποιεί τη συνάρτηση json.loads().
json.loads('{“__complex__”: true, “real”: 4, “img”: 5}', object_hook = is_complex) Αποκωδικοποίηση σύνθετου αντικειμένου JSON στο Python
JSONDecoder().decode(colour_string) Χρήση αποκωδικοποίησης JSON σε Python με Αποσειροποίηση

Συνοψίστε αυτήν την ανάρτηση με: