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, 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'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 okumanın birkaç yolu vardır, bunlara daha sonra bakacağız.
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ı:
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ı:
İşte JSON verilerini yazmanın bazı farklı yolları:
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ı:
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)
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ı:
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ı:
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ı:
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ı:
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ı:
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)
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ı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")
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