Python'da JSON'u nasıl ayrıştıracağınızı mı merak ediyorsunuz? Yalnız değilsiniz. Bu kılavuz sayesinde kod okumak, yazmak ve ayrıştırmak çocuk oyuncağı haline geliyor.
Bu kısa kılavuzda, Python’da veri ayrıştırmanın temellerini ele alacağız, JSON’un ne olduğunu açıklayacağız ve ihtiyacınız olan verileri elde etmek için bu ikisini nasıl kullanacağınızı anlatacağız.
Ayrıştırma nedir?
Ayrıştırma, bir karakter dizisini soyut sözdizimi ağacına dönüştürme işlemidir. Ayrıştırıcı daha sonra bu ağacı kullanarak girdi üzerinde çeşitli işlemler gerçekleştirir; örneğin, sözdizimsel doğruluğu kontrol eder veya girdide herhangi bir hata olup olmadığını belirler.
En yaygın ayrıştırıcı türü, karakter dizilerini belirteçlere (veya “leksemlere”) dönüştüren “lexer” olarak adlandırılır. Bir belirteç, diliniz için anlam ifade eden herhangi bir şey olabilir: bir tanımlayıcı, “hello” gibi sabit bir dize ya da hatta bir işlev çağrısı gibi daha karmaşık bir şey bile olabilir.
Tüm leksemleri tokenlere dönüştürdükten sonra, programınız bunları işlediğinde bunlara ne olacağına karar vermeniz gerekir. Bu karar, dilinizin nasıl işlediğine bağlıdır. Bazı dillerde fonksiyon kavramı yoktur; diğerleri özyineleme ve üst düzey fonksiyonlar kullanabilir; bazıları ise kapanışlar veya isimsiz ad alanları kullanabilir, vb.
Ayrıca, ayrıştırma sırasında yanlışlıkla sonsuz döngüler oluşturmamak için her bir tokenin birden fazla karakter içermemesine dikkat etmelisiniz.
JSON nedir?
JavaScript Object Notation (JSON), veri depolama veya aktarımı amacıyla nesneleri – öznitelik/değer çiftleri aracılığıyla – tanımlayan hafif bir veri alışverişi biçimidir. Örneğin, web sitenizde bir sözlük olduğunu varsayalım. JSON, bunu tanımlamak için bir dize kullanır. “title” : “örnek sözlük”
JSON dosyalarının başlıca türleri nelerdir?
JSON dosyalarının iki ana türü vardır: nesne ve dizi. Nesne, her türlü veriyi depolamanın basit bir yoludur; dizi ise başka nesneler içeren nesneleri depolamak için kullanılır.
JSON kullanmanın avantajları nelerdir?
XML veya CSV ya da HTML gibi diğer biçimlere kıyasla JSON kullanmanın en büyük avantajı, uygulamanızda herhangi bir özel ayrıştırma kodu ile uğraşmanıza gerek olmamasıdır. JSON kullanırken, verilerinizi içeren dosyayı sayfanızda doğru yere eklemeniz ve ardından buradan okumanız gerekir. Bu, kullanıcıların sitenizi görüntülemek için ne tür bir cihaz kullanırsa kullansın, her zaman tam olarak sizin sunmak istediğiniz içeriği alacağı anlamına gelir.
Python nedir?
Python, pek çok farklı türde proje için kullanabileceğiniz genel amaçlı bir programlama dilidir. Öğrenmesi kolaydır ve işinizi kolaylaştıracak çok sayıda kütüphaneye sahiptir.
Python'un etrafında aktif bir topluluk da bulunmaktadır; bu da, bu dile başlamanıza yardımcı olacak çok sayıda çevrimiçi kaynak olduğu anlamına gelir.
Dize nedir?
Bir dize, karakterlerin oluşturduğu bir dizidir. Karakterler, harfler veya sayılar gibi sembollerdir. Dolayısıyla, teknik olarak bu cümle bir dizidir.
Ancak bilgisayarlar karakterleri veya sembolleri okumaz. Yalnızca 1’leri ve 0’ları okurlar – açık ve kapalı, ya biri ya da diğeri; başka bir deyişle — ikili sistem.
Bilgisayar ekranında karakterleri görseniz de — perde arkasında — bilgisayarlar bu karakterleri 1’lere ve 0’lara dönüştürüyor ya da kodluyor. Bu işlemin tersi (ikili sayıların karakterlere dönüştürülmesi) ise kod çözme olarak adlandırılır.
Basitçe ifade etmek gerekirse, bir Python dizesi, insan komutlarını bilgisayarların anladığı ikili dile dönüştüren bir karakter dizisidir.
Python'da modüller nedir?
Modüller, büyük programları küçük, yönetilebilir ve düzenli dosyalara böler. Python’da modüller, Python deyimleri ve tanımları içeren dosyaları ifade eder. Örneğin, example.py gibi Python kodu içeren bir dosya bir modüldür. Bu modülün adı ‘example’ olur.
Python'da JSON nasıl ayrıştırılır?
JSON ile çalışmak için (JSON nesnesi içeren bir dize veya dosya) Python’un JSON modülünü kullanabilirsiniz. Modülü kullanmadan önce içe aktarmanız faydalı olacaktır.
JSON dosyasını içe aktar
JSON modülü, JSON dizelerini ve JSON nesneleri içeren dosyaları kolayca ayrıştırmayı sağlar.
JSON nesne notasyonu (veya başka herhangi bir biçim) ile biçimlendirilmiş bir dizeden aynı bilgileri ayrıştırmanın birçok yolu vardır.
En basit yol, yerleşik ‘json’ işlevini kullanmaktır. Bu işlev, girdi verilerini ayrıştırırken ne kadar girinti kullanılacağını belirten ‘indent’ adlı isteğe bağlı bir parametre kabul eder.
Değeri None ise, girinti yapılmaz. Aksi takdirde, her yeni kod satırının başına en az bir boşluk eklenir.
Bu yaklaşım, bir değerler listesinden yalnızca tek bir değer veya bir sözlük yapısından tek bir anahtar-değer çifti çıkarmak istediğiniz basit durumlarda oldukça işe yarar.
Peki ya aynı yapıdan birden fazla değer çıkarmak zorunda kalırsanız ya da bir JSON dizesini iç içe geçmiş yapılar içeren bir Python sözlüğüne dönüştürmek isterseniz? Bu gibi durumlarda, ‘json.loads’ yöntemini kullanmak daha uygun olur.
json.loads yöntemi
import json
person = '{"name": "Steve", "languages": ["English", "French"]}'
person_dict = json.loads(person)
# Output: {'name': 'Steve', 'languages': ['English', 'French']}
print( person_dict)
# Output: ['English', 'French']
print(person_dict['languages'])
Burada, ‘person’ bir JSON dizesi, person_dict ise bir sözlüktür.
Bu işlem, girdi verilerindeki tüm anahtarları ve değerleri sözlükler halinde döndürür. Herhangi bir anahtar yoksa, o anahtar/değer çifti için None değeri döndürülür. Her anahtar/değer çiftiyle ilişkili değer, sözlükteki girişi adıyla aranarak belirlenir.
Python ile JSON dosyası okuma
Bir JSON nesnesi içeren dosyayı okumak için json.load yöntemini kullanabilirsiniz.
{"name": "Steve",
"languages": ["English", "French"]
}
Bu dosyayı şu şekilde ayrıştırabilirsiniz:
import json
with open('path_to_file/person.json', 'r') as f:
data = json.load(f)
# Output: {'name': 'Steve', 'languages': ['English', 'French']}
print(data)
Python'u JSON dizesine dönüştür
json.dumps yöntemini kullanarak bir sözlüğü JSON dizesine dönüştürebilirsiniz.
import json
person_dict = {'name': 'Bob',
'age': 12,
'children': None
}
person_json = json.dumps(person_dict)
# Output: {"name": "Bob", "age": 12, "children": null}
print(person_json)
JSON'u bir dosyaya yazma
Python'da bir dosyaya JSON yazmak için json.dump() yöntemini kullanabiliriz.
import json
person_dict = {"name": "Steve",
"languages": ["English", "French"],
"married": False,
"age": 33
}
with open('person.txt', 'w') as json_file:
json.dump(person_dict, json_file)
Yukarıdaki programda, ‘w.’ komutunu kullanarak person.txt adlı bir dosyayı yazma modunda açtık. Dosya henüz mevcut değilse, bir dosya oluşturulur. Ardından, json.dump işlevi person_dict’i bir JSON dizesine dönüştürür ve bu dizi person.txt dosyasına kaydedilir.
Programı çalıştırdığınızda, “person.txt” dosyası oluşturulur. Dosyanın içinde aşağıdaki metin yer alır.
{"name": "Steve", "languages": ["English", "French"], "married": false, "age": 33}
Python'da JSON'u Düzgün Biçimlendirme
JSON verilerini analiz etmek ve hatalarını gidermek için, bu verileri daha okunabilir bir biçimde görüntülememiz gerekebilir. Bunu, json.dumps ve json.dump yöntemlerine indent ve sort_keys adlı ek parametreler aktararak yapabilirsiniz.
import json
person_string = '{"name": "Bob", "languages": "English", "numbers": [2, 1.6, null]}'
# Getting dictionary
person_dict = json.loads(person_string)
# Pretty Printing JSON string back
print(json.dumps(person_dict, indent = 4, sort_keys=True))
Programı çalıştırdığınızda, çıktı şu şekilde olacaktır:
{
"languages": "English",
"name": "Bob",
"numbers": [
2,
1.6,
null
]
}
Yukarıdaki programda, tuşları artan sırayla sıralayarak girinti için dört boşluk kullandık.
Bu arada, indent'in varsayılan değeri None, sort_keys'in varsayılan değeri ise False'dur.
Bu konu size biraz karmaşık geliyorsa, harika ve anlaşılması kolay bir “Web Kazıma’ya Giriş” kılavuzumuz var. Veri toplama işleminin sorunsuz bir şekilde gerçekleşmesini sağlamak için dönüşümlü konut proxy’leri arıyorsanız, ayrıntılar için ekibimizle iletişime geçin veya kapsamlı aylık paketlerimizi inceleyin.
SSS
JSON'u kim yarattı?
Douglas Crockford, bunu 1999 yılında XML’e alternatif olarak geliştirdi.
Sözdizimi ağacı nedir?
Sözdizimi ağacı, dil yapısını görsel olarak gösterir. Dil yapısını cümlenin bileşenlerine ayırır ve genellikle bağlamı göz ardı eder.
Python'da yerel bir JSON dosyası nasıl okunur?
Öncelikle, json modülünü içe aktarın ve ardından open() işlevini kullanarak json dosyasının adıyla dosyayı açın. Ardından, load() işlevini kullanarak json dosyasını okuyun ve json verilerini bir değişkene atayın.
