Panduan untuk mengurai JSON di Python

Komentar: 0

JSON adalah singkatan dari JavaScript Object Notation. JSON tidak hanya ringan tetapi juga mudah dibaca dan ditulis oleh manusia. Demikian pula, mesin merasa mudah untuk mengurai dan menghasilkan. Penguraian JSON sangat penting ketika bekerja dengan data dari API, file konfigurasi, atau sumber informasi tersimpan lainnya untuk setiap pengembang Python. Artikel ini akan memandu Anda melalui prosedur dasar untuk mem-parsing JSON menggunakan modul JSON Python.

Memahami JSON dan strukturnya

JSON merepresentasikan data sebagai pasangan kunci-nilai, mirip dengan kamus Python. Berikut ini adalah contoh dasar dari objek JSON:

{
    "name": "Alice",
    "age": 30,
    "is_student": false,
    "courses": ["Math", "Science"]
}

Objek JSON ini meliputi string, angka, boolean, dan larik. Memahami struktur ini sangat penting untuk mengurai dan memanipulasi data JSON di Python.

Bekerja dengan JSON di Python

Modul json Python mempermudah penguraian string dan file JSON. Modul ini mencakup metode seperti json.loads() untuk membaca JSON dari sebuah string, dan json.load() untuk membaca JSON dari sebuah file. Sebaliknya, json.dumps() dan json.dump() digunakan untuk menulis JSON ke sebuah string dan file.

Membaca data JSON

Ada beberapa cara untuk membaca data JSON, yang akan kita bahas selanjutnya.

Membaca JSON dari sebuah string

Untuk membaca data JSON dari sebuah string, gunakan metode json.loads():

import json

json_string = '{"name": "Alice", "age": 30, "is_student": false, "courses": ["Math", "Science"]}'
data = json.loads(json_string)

print(data)

Keluaran:

1.png

Membaca JSON dari sebuah file

Untuk membaca data JSON dari sebuah berkas, gunakan metode json.load():

import json

with open('data.json', 'r') as file:
    data = json.load(file)

print(data)

Keluaran:

2.png

Menulis data JSON

Berikut adalah beberapa cara berbeda untuk menulis data JSON:

Menulis JSON ke string

Untuk menulis data JSON ke sebuah string, gunakan metode json.dumps():

import json

data = {
    "name": "Alice",
    "age": 30,
    "is_student": False,
    "courses": ["Math", "Science"]
}

json_string = json.dumps(data)
print(json_string)

Keluaran:

3.png

Menulis JSON ke sebuah file

Untuk menulis data JSON ke sebuah berkas, gunakan metode json.dump():

import json

data = {
    "name": "Alice",
    "age": 30,
    "is_student": False,
    "courses": ["Math", "Science"]
}

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

Menangani JSON bersarang

Objek JSON bersarang adalah hal yang umum ketika bekerja dengan struktur data yang lebih kompleks. Python dapat dengan mudah menangani struktur bertingkat ini.

import json

nested_json_string = '''
{
    "name": "Alice",
    "age": 30,
    "is_student": false,
    "courses": ["Math", "Science"],
    "address": {
        "street": "123 Main St",
        "city": "Wonderland"
    }
}
'''

data = json.loads(nested_json_string)
print(data['address']['city'])

Keluaran:

4.png

Penyandi JSON khusus

Terkadang, Anda perlu mengonversi objek Python khusus menjadi JSON. Hal ini membutuhkan penyandi khusus.

import json

class Student:
    def __init__(self, name, age, is_student):
        self.name = name
        self.age = age
        self.is_student = is_student

class StudentEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Student):
            return obj.__dict__
        return super().default(obj)

student = Student("Alice", 30, False)
json_string = json.dumps(student, cls=StudentEncoder)
print(json_string)

Keluaran:

5.png

Dekoder JSON khusus

Demikian pula, untuk memecahkan kode data JSON menjadi objek Python khusus, Anda memerlukan dekoder khusus.

import json

class Student:
    def __init__(self, name, age, is_student):
        self.name = name
        self.age = age
        self.is_student = is_student

def student_decoder(dct):
    return Student(dct['name'], dct['age'], dct['is_student'])

json_string = '{"name": "Alice", "age": 30, "is_student": false}'
student = json.loads(json_string, object_hook=student_decoder)
print(student.name)

Keluaran:

6.png

Menangani masalah umum

Bekerja dengan data JSON dapat menyebabkan beberapa kesalahan umum, terutama saat mengurai, membuat, atau mengakses data JSON. Berikut adalah beberapa kesalahan yang paling umum:

Format JSON tidak valid

Kesalahan umum saat mem-parsing JSON adalah menemukan format JSON yang tidak valid. JSON membutuhkan tanda kutip ganda di sekitar kunci dan nilai string, serta penempatan tanda kurung dan tanda kurung yang tepat.

import json

invalid_json_string = "{'name': 'Alice', 'age': 30, 'is_student': False}"
try:
    data = json.loads(invalid_json_string)
except json.JSONDecodeError as e:
    print(f"Invalid JSON format: {e}")

Keluaran:

7.png

Menangani kunci yang hilang

Saat mem-parsing data JSON, Anda mungkin menemukan kunci yang hilang. Gunakan metode get untuk memberikan nilai default jika ada kunci yang hilang.

import json

json_string = '{"name": "Alice", "age": 30}'
data = json.loads(json_string)

is_student = data.get('is_student', False)
print(is_student)import json

json_string = '{"name": "Alice", "age": 30}'
data = json.loads(json_string)

is_student = data.get('is_student', False)
print(is_student)

Mengurai masalah penguraian JSON

Gunakan modul pdb untuk mengatur breakpoint dan men-debug kode penguraian JSON Anda.

import json
import pdb

json_string = '{"name": "Alice", "age": 30, "is_student": false}'
pdb.set_trace()
data = json.loads(json_string)
print(data)

Contoh praktis penanganan JSON dalam web scraping

Scraping web sering kali melibatkan ekstraksi data dari API web yang mengembalikan respons JSON. Berikut adalah contoh ringkas yang menggunakan pustaka permintaan dan titik akhir https://httpbin.org/anything.

Pertama, pastikan Anda telah menginstal library requests:

pip install requests

Kode ini mengimpor permintaan untuk permintaan HTTP dan json untuk menangani data JSON. Kode ini mengirimkan permintaan GET ke URL target menggunakan requests.get(url) dan mem-parsing respons JSON dengan response.json(), mengubahnya menjadi kamus Python. Kami mengambil dan mencetak data tertentu seperti header, agen pengguna, asal, dan URL.

Kode ini mengandung penanganan kesalahan yang kuat; kode ini menangkap json.JSONDecodeError ketika terjadi kesalahan decoding JSON, dan KeyError ketika kunci tertentu tidak ada, akibatnya membuat program terlindungi dari kerusakan 'tidak ada data'. Oleh karena itu, ketahanan kode tersebut memungkinkannya untuk menangani tugas-tugas scraping web yang sebenarnya dengan sempurna.

import requests
import json

url = 'https://httpbin.org/anything'

response = requests.get(url)

try:
    data = response.json()

    # Mengekstrak data spesifik dari respons JSON
    headers = data['headers']
    user_agent = headers.get('User-Agent', 'N/A')
    origin = data.get('origin', 'N/A')
    url = data.get('url', 'N/A')

    print(f"User Agent: {user_agent}")
    print(f"Origin: {origin}")
    print(f"URL: {url}")

except json.JSONDecodeError:
    print("Error decoding JSON response")

except KeyError as e:
    print(f"Key error: {e} not found in the JSON response")

8.png

Setiap pembuat kode Python harus tahu cara mem-parsing JSON. Dengan modul JSON dan cara terbaik untuk melakukannya yang disorot oleh manual ini, Anda akan dapat membaca, menulis, dan men-debug data JSON dengan cukup cepat. Hal ini berarti Anda akan secara teratur menguji kode Anda, dan menggunakan alat yang tepat dan fitur terbaru yang tersedia di Python untuk keterampilan penanganan JSON yang lebih baik.

Ketika melakukan web scraping, seseorang menemukan parsing JSON menjadi penting, mengingat fakta bahwa data yang diambil dari API web biasanya muncul dalam bentuk JSON. Selain itu, Anda dapat mengekstrak informasi dari berbagai sumber web secara efisien, jika Anda dapat mengurai dan memanipulasi data JSON dengan cara yang baik.

Komentar:

0 komentar