Python'da JSON ayrıştırma kılavuzu

Yorumlar: 0

JSON, JavaScript Nesne Notasyonu anlamına gelir. Sadece hafif olmakla kalmaz, aynı zamanda insanlar için okunması ve yazılması da kolaydır. Benzer şekilde makineler için de ayrıştırılması ve üretilmesi kolaydır. JSON ayrıştırma, herhangi bir Python geliştiricisi için API'lerden, yapılandırma dosyalarından veya diğer depolanmış bilgi kaynaklarından gelen verilerle çalışırken son derece önemlidir. Bu makale, Python'un JSON modülünü kullanarak JSON'u ayrıştırmak için temel prosedürleri ele almaktadır.

JSON'u ve yapısını anlama

JSON, Python sözlüğüne benzer şekilde verileri anahtar-değer çiftleri olarak temsil eder. İşte temel bir JSON nesnesi örneği:

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

Bu JSON nesnesi bir string, bir sayı, bir boolean ve bir dizi içerir. Bu yapıyı anlamak, Python'da JSON verilerini ayrıştırmak ve işlemek için temeldir.

Python'da JSON ile Çalışma

Python'un json modülü, JSON dizelerini ve dosyalarını ayrıştırmayı kolaylaştırır. Bu modül, bir dizeden JSON okumak için json.loads() ve bir dosyadan JSON okumak için json.load() gibi yöntemler içerir. Tersine, json.dumps() ve json.dump() sırasıyla JSON'u bir dizeye ve bir dosyaya yazmak için kullanılır.

JSON verilerini okuma

JSON verilerini okumanın birkaç yolu vardır, bunlara daha sonra bakacağız.

Dizeden JSON okuma

JSON verilerini bir dizeden okumak için json.loads() yöntemini kullanın:

import json

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

print(data)

Çıktı:

1.png

Dosyadan JSON okuma

JSON verilerini bir dosyadan okumak için json.load() yöntemini kullanın:

import json

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

print(data)

Çıktı:

2.png

JSON verilerini yazma

İşte JSON verilerini yazmanın bazı farklı yolları:

JSON'u bir dizeye yazma

JSON verilerini bir dizeye yazmak için json.dumps() yöntemini kullanın:

import json

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

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

Çıktı:

3.png

JSON'u bir dosyaya yazma

JSON verilerini bir dosyaya yazmak için json.dump() yöntemini kullanın:

import json

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

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

İç içe JSON işleme

Daha karmaşık veri yapıları ile çalışırken iç içe geçmiş JSON nesneleri yaygındır. Python bu iç içe geçmiş yapıları kolayca işleyebilir.

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

Çıktı:

4.png

Özel JSON kodlayıcı

Bazen, özel Python nesnelerini JSON'a dönüştürmeniz gerekir. Bu özel bir kodlayıcı gerektirir.

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)

Çıktı:

5.png

Özel JSON kod çözücü

Benzer şekilde, JSON verilerini özel Python nesnelerine çözmek için özel bir kod çözücüye ihtiyacınız vardır.

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)

Çıktı:

6.png

Sık karşılaşılan sorunların ele alınması

JSON verileriyle çalışmak, özellikle JSON verilerini ayrıştırırken, oluştururken veya bunlara erişirken çeşitli yaygın hatalara yol açabilir. İşte en yaygın olanlardan bazıları:

Geçersiz JSON biçimi

JSON ayrıştırılırken sık karşılaşılan bir hata, geçersiz JSON biçimiyle karşılaşmaktır. JSON, anahtarlar ve dize değerleri etrafında çift tırnak işareti ve parantez ve ayraçların uygun şekilde yerleştirilmesini gerektirir.

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

Çıktı:

7.png

Kayıp anahtarların işlenmesi

JSON verilerini ayrıştırırken eksik anahtarlarla karşılaşabilirsiniz. Bir anahtar eksikse varsayılan bir değer sağlamak için get yöntemini kullanın.

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)

JSON ayrıştırma sorunlarında hata ayıklama

Kesme noktaları ayarlamak ve JSON ayrıştırma kodunuzda hata ayıklamak için pdb modülünü kullanın.

import json
import pdb

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

Web kazımada JSON kullanımına pratik bir örnek

Web kazıma genellikle JSON yanıtları döndüren web API'lerinden veri çıkarmayı içerir. İşte requests kütüphanesini ve https://httpbin.org/anything uç noktasını kullanan kompakt bir örnek.

Öncelikle, requests kütüphanesinin yüklü olduğundan emin olun:

pip install requests

Bu kod HTTP istekleri için requests ve JSON verilerini işlemek için json öğelerini içe aktarır. requests.get(url) kullanarak hedef URL'ye bir GET isteği gönderir ve JSON yanıtını response.json() ile ayrıştırarak bir Python sözlüğüne dönüştürür. Başlıklar, kullanıcı aracısı, kaynak ve URL gibi belirli verileri çeker ve yazdırırız.

Kod, güçlü hata işleme özelliğine sahiptir; JSON kod çözme hatası oluştuğunda json.JSONDecodeError ve belirli bir anahtar olmadığında KeyError hatalarını yakalar ve sonuç olarak programın 'veri yok' çökmelerine karşı korunmasını sağlar. Bu tür bir kod sağlamlığı, bu nedenle gerçek web kazıma görevlerini mükemmel bir şekilde ele almasını sağlar.

import requests
import json

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

response = requests.get(url)

try:
    data = response.json()

    # JSON yanıtından belirli verileri ayıklama
    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

Her Python kodlayıcısı JSON'un nasıl ayrıştırılacağını bilmelidir. Bu kılavuzda vurgulanan JSON modülü ve bunu yapmanın en iyi yolu ile JSON verilerini yeterince hızlı okuyabilecek, yazabilecek ve hata ayıklayabileceksiniz. Bu, kodlarınızı düzenli olarak test edeceğiniz ve daha iyi JSON işleme becerileri için Python'da bulunan doğru araçları ve en güncel özellikleri kullanacağınız anlamına gelir.

Web kazıma yaparken, web API'lerinden alınan verilerin genellikle JSON biçiminde göründüğü gerçeği göz önüne alındığında, JSON'u ayrıştırmanın önemli olduğu görülür Ayrıca, JSON verilerini iyi bir şekilde ayrıştırabilir ve manipüle edebilirseniz, çeşitli web kaynaklarından verimli bir şekilde bilgi alabilirsiniz.

Yorumlar:

0 yorumlar