Πώς να αναλύσετε το JSON στην Python

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

Μέχρι το τέλος αυτού του σεμιναρίου, θα έχετε μάθει:

  • τα βασικά του JSON,
  • πώς να αναλύσετε και να δημιουργήσετε συμβολοσειρές JSON στην Python και
  • πώς να διαβάζετε και να γράφετε σε αρχεία JSON στην Python.

Ας ξεκινήσουμε!⏳

Τι είναι το JSON;

Το JSON σημαίνει σημειογραφία αντικειμένου JavaScript και είναι μια μορφή που βασίζεται σε κείμενο για ανταλλαγή δεδομένων. Αν και το JSON εμπνέεται αρχικά από αντικείμενα JavaScript, σχεδόν όλες οι γλώσσες προγραμματισμού υποστηρίζουν την εργασία με JSON.

Εάν έχετε εργαστεί ποτέ με API ή έχετε διαβάσει αρχεία διαμόρφωσης, πιθανότατα θα είχατε τρέξει σε JSON.

📑 Στέλνετε και λαμβάνετε δεδομένα σε JSON κατά την υποβολή ερωτημάτων σε API. Και το JSON χρησιμοποιείται επίσης ευρέως στην επικοινωνία πελάτη-διακομιστή σε εφαρμογές λογισμικού. Επιπλέον, μπορείτε να χρησιμοποιήσετε το JSON για αποθήκευση δεδομένων γενικής χρήσης.

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

Πριν προχωρήσουμε περαιτέρω, εδώ είναι μερικά σημεία που αξίζει να σημειώσουμε:

  • Στην Python, ένα αντικείμενο JSON αποθηκεύεται ως λεξικό.
  • Ένας πίνακας στο JSON αποθηκεύεται ως λίστα Python.
  • Στο JSON, οι τιμές Boolean συμβολίζονται ως true και false. Στην Python, αυτά μετατρέπονται σε Booleans True και False.

Για περισσότερες λεπτομέρειες σχετικά με τους τύπους δεδομένων που μεταφράζονται από JSON σε Python, διαβάστε τα έγγραφα εδώ.

Καθώς η λειτουργική μονάδα json είναι μέρος της τυπικής βιβλιοθήκης της Python, δεν χρειάζεται να την εγκαταστήσετε. Μπορείτε να κάνετε εισαγωγή στον τρέχοντα κατάλογο σας, ως εξής:

import json

Πώς να φορτώσετε μια συμβολοσειρά JSON στην Python

Η γενική σύνταξη για τη φόρτωση μιας συμβολοσειράς JSON στην Python είναι:

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

Εδώ,

  • Το είναι το λεξικό Python στο οποίο θέλετε να φορτώσετε τη συμβολοσειρά JSON,
  • Το είναι οποιαδήποτε έγκυρη συμβολοσειρά JSON.

Αυτό φορτώνει το στο λεξικό Python .

Ας κωδικοποιήσουμε ένα παράδειγμα. Εδώ το json_str είναι μια συμβολοσειρά JSON.

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

Και το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να φορτώσετε τη συμβολοσειρά JSON json_str σε ένα λεξικό Python χρησιμοποιώντας τη μέθοδο loads(). Μπορείτε να χρησιμοποιήσετε την ενσωματωμένη συνάρτηση type() για να επαληθεύσετε ότι το py_dict είναι λεξικό Python.

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

Όπως φαίνεται στον παραπάνω κώδικα, όλα τα πεδία στη συμβολοσειρά JSON είναι ζεύγη κλειδιού-τιμής στο py_dict.

Πώς να δημιουργήσετε συμβολοσειρές JSON στην Python

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

Μπορείτε να το κάνετε χρησιμοποιώντας τη μέθοδο dumps() με αυτήν τη σύνταξη:

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

Εδώ,

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

Έτσι, η μέθοδος dumps() μεταφέρει το σε μια συμβολοσειρά JSON .

Στο υπάρχον λεξικό μας Python py_dict. Ας προσθέσουμε ένα νέο κλειδί “ταινίες”. Μπορείτε να το κάνετε όπως φαίνεται στο παρακάτω απόσπασμα κώδικα:

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

Τώρα, ας αποθέσουμε το τροποποιημένο λεξικό σε μια νέα συμβολοσειρά JSON json_str2 χρησιμοποιώντας τη μέθοδο dumps().

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

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

Και μπορείτε να το κάνετε αυτό ορίζοντας την εσοχή σε έναν ακέραιο αριθμό όπως το 2, όπως φαίνεται παρακάτω:

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

Παρατηρήστε πώς έχει μορφοποιηθεί η έξοδος με εσοχή και είναι εύκολο να το παρακολουθήσετε.

Σημείωση: 💡 Εάν θέλετε τα κλειδιά να ταξινομηθούν με αλφαβητική σειρά, μπορείτε να ορίσετε την παράμετρο sort_keys σε True.

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

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

Και τα πλήκτρα εμφανίζονται τώρα με αλφαβητική σειρά: “συγγραφέας”, “τίτλος” και “έτος”.

Μέχρι στιγμής, έχετε μάθει πώς να εργάζεστε με συμβολοσειρές JSON στην Python. Στην επόμενη ενότητα, θα μάθετε πώς να εργάζεστε με αρχεία JSON.

Πώς να διαβάσετε ένα αρχείο JSON στην Python

Για να διαβάσετε ένα αρχείο JSON στην Python, χρησιμοποιήστε την ακόλουθη σύνταξη:

json.load(<json-file>) 

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

Παρατηρήστε πώς χρησιμοποιούμε τη μέθοδο load() και όχι τη μέθοδο loads(). Η loads() φορτώνει μια συμβολοσειρά JSON, ενώ η load() φορτώνει ένα αρχείο JSON.

Θα πρέπει να σκεφτείτε να χρησιμοποιήσετε διαχειριστές περιβάλλοντος όταν εργάζεστε με αρχεία στην Python. Μπορείτε επίσης να δοκιμάσετε να διαβάσετε αρχεία ως εξής, χωρίς να χρησιμοποιήσετε τη διαχείριση περιβάλλοντος:

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

contents = my_file.read()

print(contents)

file.close()

Εάν δεν κλείσετε το αρχείο, μπορεί να υπάρξει πιθανή σπατάλη πόρων.

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

Και μπορείτε να χρησιμοποιήσετε τη διαχείριση περιβάλλοντος για να διαβάσετε αρχεία, όπως φαίνεται παρακάτω:

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

Καθώς διαβάζετε από ένα αρχείο, καθορίστε τη λειτουργία ως ανάγνωση—που υποδεικνύεται με το ‘r’ στον παραπάνω κώδικα.

Σημείωση: Για να πλοηγηθείτε εύκολα στον τρέχοντα κατάλογο, βεβαιωθείτε ότι το αρχείο JSON βρίσκεται στον ίδιο φάκελο με το main.py, όπως φαίνεται στην παρακάτω εικόνα. Εάν το αρχείο JSON σας βρίσκεται σε διαφορετικό φάκελο, βεβαιωθείτε ότι έχετε καθορίσει τη διαδρομή προς το αρχείο.

Διαβάστε το αρχείο JSON στην Python.

Στην επόμενη ενότητα, θα μάθετε πώς να γράφετε σε ένα αρχείο JSON.✍

Πώς να γράψετε σε ένα αρχείο JSON στην Python

Για να γράψετε σε ένα υπάρχον αρχείο JSON ή για να δημιουργήσετε ένα νέο αρχείο JSON, χρησιμοποιήστε τη μέθοδο dump() όπως φαίνεται:

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

# where <dict_obj> is a Python dictionary 

# and <json_file> is the JSON file 

Έτσι, η παραπάνω σύνταξη απορρίπτει το λεξικό στο αρχείο JSON .

Στην προηγούμενη ενότητα, είχαμε το λεξικό py_dict. Τώρα ας το απορρίψουμε σε ένα νέο αρχείο JSON. Και ας το ονομάσουμε new_file.json.

Και το ακόλουθο κελί κώδικα δείχνει πώς μπορείτε να χρησιμοποιήσετε τη συνάρτηση dump():

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

Σημείωση: Το άνοιγμα ενός αρχείου στη λειτουργία εγγραφής (w) αντικαθιστά το περιεχόμενο εάν το αρχείο υπάρχει. Εάν το αρχείο δεν υπάρχει, το αρχείο δημιουργείται.

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

Δημιουργία αρχείου JSON στην Python

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

συμπέρασμα

⏲ ​​Ήρθε η ώρα για μια γρήγορη περίληψη.

Σε αυτό το σεμινάριο, έχετε μάθει:

  • τα βασικά της χρήσης JSON,
  • πώς να χρησιμοποιήσετε τις μεθόδους loads() και load() για να διαβάσετε τα αρχεία JSON string και JSON αντίστοιχα,
  • πώς να χρησιμοποιήσετε τις μεθόδους dumps() και dump() για την απόθεση λεξικών Python σε συμβολοσειρές JSON και αρχεία JSON αντίστοιχα.

Ελπίζω να βρήκατε αυτό το σεμινάριο χρήσιμο. Καλή μάθηση!

Μπορείτε επίσης να δείτε τα Εργαλεία JSON για ανάλυση, μορφοποίηση και επικύρωση.

  Τι είναι το Wondershare Helper Compact;