Python JSON: Kodlama (döküm), Kod Çözme (yükleme) json Veri & Dosya (Örnek)

İçindekiler:

Anonim

JSON nedir?

JSON , JavaScript'ten esinlenen, veri alışverişi için standart bir formattır. JSON genellikle dize veya metin biçimindedir. JSON açılımı J Ava S cript O Nesne , N -rotasyon.

JSON sözdizimi: JSON, anahtar ve değer çifti olarak yazılır.

{"Key": "Value","Key": "Value",}

JSON, Python sözlüğüne çok benzer . Python, JSON'u destekler ve JSON olarak dahili bir kitaplığa sahiptir.

Python'da JSON Kitaplığı

Python'un " mareşal " ve " turşu" harici modülleri, JSON kitaplığının bir sürümünü korur . Python'da kodlama ve kod çözme gibi JSON ile ilgili işlemleri gerçekleştirmek için önce JSON kitaplığını içe aktarmanız ve bunun için .py dosyanızda,

import json

JSON modülünde aşağıdaki yöntemler mevcuttur

Yöntem Açıklama
dökümler () JSON nesnelerine kodlama
dökümü () dosyaya kodlanmış dize yazma
yükler () JSON dizesinin kodunu çöz
yük() JSON dosyası okurken kodu çöz

Python'dan JSON'a (Kodlama)

Python JSON Kitaplığı, varsayılan olarak Python nesnelerinin JSON nesnelerine aşağıdaki çevirisini gerçekleştirir

Python JSON
dikte etmek Nesne
liste Dizi
unicode Dize
sayı - int, uzun sayı - int
şamandıra sayı - gerçek
Doğru Doğru
Yanlış Yanlış
Yok Boş

Python verilerini JSON'a dönüştürmek, Kodlama işlemi olarak adlandırılır. Kodlama, JSON kitaplık yöntemi - dumps () yardımıyla yapılır

dumps () yöntemi, python sözlük nesnesini JSON dizesi veri biçimine dönüştürür.

Şimdi ilk kodlama örneğimizi Python ile gerçekleştirelim.

import jsonx = {"name": "Ken","age": 45,"married": True,"children": ("Alice","Bob"),"pets": ['Dog'],"cars": [{"model": "Audi A1", "mpg": 15.1},{"model": "Zeep Compass", "mpg": 18.1}]}# sorting result in asscending order by keys:sorted_string = json.dumps(x, indent=4, sort_keys=True)print(sorted_string)

Çıktı:

{"person": {"name": "Kenn", "sex": "male", "age": 28}})

Aynı işlevi dump () kullanarak sözlüğün JSON dosyasını oluşturalım.

# here we create new data_file.json file with write mode using file i/o operationwith open('json_file.json', "w") as file_write:# write json data into filejson.dump(person_data, file_write)

Çıktı:

Gösterecek bir şey yok

… Sisteminizde json_file.json oluşturulduğunda o dosyayı kontrol edebilirsiniz.

JSON'dan Python'a (Kod Çözme)

JSON dize kod çözme, Python'daki JSON kitaplığının dahili yöntemi load () & load () yardımıyla yapılır . Burada çeviri tablosu, JSON dizesinin Python'unda kod çözme gerçekleştirmeye yardımcı olan Python nesnelerine JSON nesnelerinin örneğini gösterir.

JSON Python
Nesne dikte etmek
Dizi liste
Dize unicode
sayı - int sayı - int, uzun
sayı - gerçek şamandıra
Doğru Doğru
Yanlış Yanlış
Boş Yok

Python'da json.loads () fonksiyonu yardımıyla temel bir kod çözme örneği görelim ,

import json # json library imported# json data stringperson_data = '{ "person": { "name": "Kenn", "sex": "male", "age": 28}}'# Decoding or converting JSON format in dictionary using loads()dict_obj = json.loads(person_data)print(dict_obj)# check type of dict_objprint("Type of dict_obj", type(dict_obj))# get human object detailsprint("Person… ", dict_obj.get('person'))

Çıktı:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}Type of dict_obj Person… {'name': 'John', 'sex': 'male'}

JSON Dosyasının Kodunu Çözme veya JSON Dosyasını Python'da Ayrıştırma

NOT: JSON dosyasının kodunu çözme, Dosya Giriş / Çıkış (G / Ç) ile ilgili işlemdir. JSON dosyası, sisteminizde, programınızda bahsettiğiniz konumda bulunmalıdır.

Misal,

import json#File I/O Open function for read data from JSON Filewith open('X:/json_file.json') as file_object:# store file data in objectdata = json.load(file_object)print(data)

Burada veriler Python'un bir sözlük nesnesidir.

Çıktı:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}

Python'da Kompakt Kodlama

JSON dosyanızın boyutunu küçültmeniz gerektiğinde, Python'da kompakt kodlamayı kullanabilirsiniz.

Misal,

import json# Create a List that contains dictionarylst = ['a', 'b', 'c',{'4': 5, '6': 7}]# separator used for compact representation of JSON.# Use of ',' to identify list items# Use of ':' to identify key and value in dictionarycompact_obj = json.dumps(lst, separators=(',', ':'))print(compact_obj)

Çıktı:

'["a", "b", "c", {"4": 5, "6": 7}]'** Here output of JSON is represented in a single line which is the most compact representation by removing the space character from compact_obj ** 

JSON kodunu biçimlendirme (Güzel baskı)

  • Amaç, insan anlayışı için iyi biçimlendirilmiş kod yazmaktır. Güzel baskının yardımıyla, herkes kodu kolayca anlayabilir.
  • Misal,
import jsondic = { 'a': 4, 'b': 5 }''' To format the code use of indent and 4 shows number of space and use of separator is not necessary but standard way to write code of particular function. '''formatted_obj = json.dumps(dic, indent=4, separators=(',', ': '))print(formatted_obj)

Çıktı:

{"a" : 4,"b" : 5}

Bunu daha iyi anlamak için, girintiyi 40 olarak değiştirin ve çıktıyı gözlemleyin.

JSON kodunu sipariş etme:

dumps () işlevinin bağımsız değişkenindeki sort_keys özniteliği, anahtarı JSON'da artan sırada sıralayacaktır. Sort_keys argümanı bir Boolean özniteliğidir. Doğru sıralamaya izin verilir, aksi takdirde

Misal,

import jsonx = {"name": "Ken","age": 45,"married": True,"children": ("Alice", "Bob"),"pets": [ 'Dog' ],"cars": [{"model": "Audi A1", "mpg": 15.1},{"model": "Zeep Compass", "mpg": 18.1}],}# sorting result in asscending order by keys:sorted_string = json.dumps(x, indent=4, sort_keys=True)print(sorted_string)

Çıktı:

{"age": 45,"cars": [ {"model": "Audi A1","mpg": 15.1},{"model": "Zeep Compass","mpg": 18.1}],"children": [ "Alice","Bob"],"married": true,"name": "Ken","pets": ["Dog"]}

Gördüğünüz gibi anahtarların yaşı, arabalar, çocuklar vb. Artan sırada düzenlenmiştir.

Python'un karmaşık nesne kodlaması

Karmaşık bir nesnenin iki farklı parçası vardır.

  1. Gerçek kısım
  2. Hayali kısım

Örnek: 3 + 2i

Karmaşık bir nesnenin kodlamasını yapmadan önce, bir değişkenin karmaşık olup olmadığını kontrol etmeniz gerekir. Bir örnek yöntemi kullanarak bir değişkende depolanan değeri kontrol eden bir işlev oluşturmanız gerekir.

Kontrol nesnesinin karmaşık veya kodlamaya uygun olması için belirli bir işlev oluşturalım.

import json# create function to check instance is complex or notdef complex_encode(object):# check using isinstance methodif isinstance(object, complex):return [object.real, object.imag]# raised error using exception handling if object is not complexraise TypeError(repr(object) + " is not JSON serialized")# perform json encoding by passing parametercomplex_obj = json.dumps(4 + 5j, default=complex_encode)print(complex_obj)

Çıktı:

'[4.0, 5.0]'

Python'da karmaşık JSON nesnesi kod çözme

JSON'daki karmaşık nesnenin kodunu çözmek için, JSON dizesinin karmaşık nesneyi içerip içermediğini kontrol eden bir object_hook parametresi kullanın. Misal,

import json# function check JSON string contains complex objectdef is_complex(objct):if '__complex__' in objct:return complex(objct['real'], objct['img'])return objct# use of json loads method with object_hook for check object complex or notcomplex_object =json.loads('{"__complex__": true, "real": 4, "img": 5}', object_hook = is_complex)#here we not passed complex object so it's convert into dictionarysimple_object =json.loads('{"real": 6, "img": 7}', object_hook = is_complex)print("Complex_object… ",complex_object)print("Without_complex_object… ",simple_object)

Çıktı:

Complex_object… (4+5j)Without_complex_object… {'real': 6, 'img': 7}

JSON Serileştirme sınıfı JSONEncoder'a genel bakış

JSONEncoder sınıfı, kodlama yapılırken herhangi bir Python nesnesinin serileştirilmesi için kullanılır. Üç farklı kodlama yöntemi içerir.

  • default (o) - Alt sınıfta uygulanır ve o nesnesi için serileştirme nesnesini döndürür .
  • encode (o) - json.dumps () yöntemiyle aynı, Python veri yapısının JSON dizesini döndürür.
  • iterencode (o) - Dizeyi tek tek temsil eder ve o nesnesini kodlar.

JSONEncoder sınıfının encode () yöntemi yardımıyla herhangi bir Python nesnesini de kodlayabiliriz.

# import JSONEncoder class from jsonfrom json.encoder import JSONEncodercolour_dict = { "colour": ["red", "yellow", "green" ]}# directly called encode method of JSONJSONEncoder().encode(colour_dict)

Çıktı:

'{"colour": ["red", "yellow", "green"]}'

JSON Seriyi Kaldırma sınıfı JSONDecoder'a genel bakış

JSONDecoder sınıfı, kod çözme yapılırken herhangi bir Python nesnesinin serisini kaldırmak için kullanılır. Üç farklı kod çözme yöntemi içerir.

  • default (o) - Alt sınıfa uygulanır ve serileştirilmemiş nesne o nesnesini döndürür .
  • decode (o) - json.loads () yöntemiyle aynı, JSON dizesi veya verisinin Python veri yapısını döndürür.
  • raw_decode (o) - Python sözlüğünü tek tek temsil eder ve o nesnenin kodunu çözer.

JSONDecoder sınıfının decode () yönteminin yardımıyla JSON dizesini de çözebiliriz.

import json# import JSONDecoder class from jsonfrom json.decoder import JSONDecodercolour_string = '{ "colour": ["red", "yellow"]}'# directly called decode method of JSONJSONDecoder().decode(colour_string)

Çıktı:

{'colour': ['red', 'yellow']}

URL'den JSON verilerinin kodunu çözme: Gerçek Hayat Örneği

CityBike NYC (Bisiklet Paylaşım Sistemi) verilerini belirtilen URL'den (https://feeds.citibikenyc.com/stations/stations.json) alacağız ve sözlük formatına dönüştüreceğiz.

Misal,

NOT: - İstek kitaplığının Python'unuzda zaten kurulu olduğundan emin olun, yoksa Terminal veya CMD'yi açın ve şunu yazın:

  • (Python 3 veya üstü için) pip3 yükleme istekleri
import jsonimport requests# get JSON string data from CityBike NYC using web requests libraryjson_response= requests.get("https://feeds.citibikenyc.com/stations/stations.json")# check type of json_response objectprint(type(json_response.text))# load data in loads() function of json librarybike_dict = json.loads(json_response.text)#check type of news_dictprint(type(bike_dict))# now get stationBeanList key data from dictprint(bike_dict['stationBeanList'][0])

Çıktı:

{'id': 487,'stationName': 'E 20 St & FDR Drive','availableDocks': 24,'totalDocks': 34,'latitude': 40.73314259,'longitude': -73.97573881,'statusValue': 'In Service','statusKey': 1,'availableBikes': 9,'stAddress1': 'E 20 St & FDR Drive','stAddress2': '','city': '','postalCode': '','location': '','altitude': '','testStation': False,'lastCommunicationTime': '2018-12-11 10:59:09 PM', 'landMark': ''}

Python'daki JSON Kitaplığı ile İlgili İstisnalar:

  • Sınıf json.JSONDecoderError , kod çözme işlemiyle ilgili istisnayı işler. ve ValueError'ın bir alt sınıfıdır.
  • İstisna - json.JSONDecoderError (msg, doc)
  • İstisna Parametreleri şunlardır:
    • msg - Biçimlendirilmemiş Hata mesajı
    • doc - JSON belgeleri ayrıştırıldı
    • konum - başarısız olduğunda dokümanın dizinini başlat
    • lineno - gösterilmeyen satır, poza karşılık gelir
    • iki nokta üst üste - sütun no karşılık gelir

Misal,

import json#File I/O Open function for read data from JSON Filedata = {} #Define Empty Dictionary Objecttry:with open('json_file_name.json') as file_object:data = json.load(file_object)except ValueError:print("Bad JSON file format, Change JSON File")

Python'da Sonsuz ve NaN Sayıları

JSON Veri Değişim Biçimi (RFC - Açıklama İsteği), Sonsuz veya Nan Değerine izin vermez, ancak Python-JSON Kitaplığında Sonsuz ve Nan Değeri ile ilgili işlemleri gerçekleştirmek için herhangi bir kısıtlama yoktur. JSON, INFINITE ve Nan veri türünü alırsa, onu değişmez hale dönüştürür.

Misal,

import json# pass float Infinite valueinfinite_json = json.dumps(float('inf'))# check infinite json typeprint(infinite_json)print(type(infinite_json))json_nan = json.dumps(float('nan'))print(json_nan)# pass json_string as Infinityinfinite = json.loads('Infinity')print(infinite)# check type of Infinityprint(type(infinite))

Çıktı:

InfinityNaNinf

JSON Dizesinde tekrarlanan anahtar

RFC, anahtar adının bir JSON nesnesinde benzersiz olması gerektiğini belirtir, ancak bu zorunlu değildir. Python JSON kitaplığı, JSON'da tekrarlanan nesneler için bir istisna oluşturmaz. Yinelenen tüm anahtar / değer çiftlerini yok sayar ve aralarında yalnızca son anahtar / değer çiftini dikkate alır.

  • Misal,
import jsonrepeat_pair = '{"a": 1, "a": 2, "a": 3}'json.loads(repeat_pair)

Çıktı:

{'a': 3}

Python'da JSON ile CLI (Komut Satırı Arayüzü)

json.tool , JSON güzel baskı sözdizimini doğrulamak için komut satırı arabirimi sağlar. Bir CLI örneği görelim

$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool

Çıktı:

{"name": " Kings Authur "}

Python'da JSON'un Avantajları

  • Kap ve değer arasında geri taşınması kolaydır (JSON'dan Python'a ve Python'dan JSON'a)
  • İnsan tarafından okunabilir (Pretty-print) JSON Nesnesi
  • Veri işlemede yaygın olarak kullanılır.
  • Tek dosyada aynı veri yapısına sahip değildir.

Python'da JSON'un uygulama sınırlaması

  • JSON aralığının seri durumunun kaldırılmasında ve bir sayının tahmininde
  • JSON dizesinin maksimum uzunluğu ve JSON dizileri ve nesnenin iç içe geçme düzeyleri.

Hile kodu

json.dumps (person_data)

JSON Nesnesi Oluşturun

json.dump (person_data, file_write)

Python Dosya G / Ç'sini kullanarak JSON Dosyası oluşturun

compact_obj = json.dumps (veri, ayırıcılar = (',', ':'))

Ayırıcı kullanarak JSON Nesnesinden boşluk karakterini kaldırarak JSON Nesnesini sıkıştırın

formatted_obj = json.dumps (dic, indent = 4, ayırıcılar = (',', ':'))

Girinti kullanarak JSON kodunu biçimlendirme

sıralanmış_string = json.dumps (x, girinti = 4, sıralama_anahtarları = Doğru)

JSON nesne anahtarını alfabetik sıraya göre sıralama

complex_obj = json.dumps (4 + 5j, varsayılan = karmaşık_kod)

JSON'da Python Karmaşık Nesne kodlaması

JSONEncoder (). Kodlama (colour_dict)

Serileştirme için JSONEncoder Sınıfının Kullanımı

json.loads (veri_dizesi)

JSON dizesini json.loads () işlevini kullanarak Python sözlüğünde çözme

json.loads ('{"__ complex__": doğru, "gerçek": 4, "img": 5}', object_hook = is_complex)

Karmaşık JSON nesnesinin Python'a kodunun çözülmesi

JSONDecoder (). Decode (renk_dizesi)

Seri Durumdan Çıkarma ile JSON'dan Python'a Kod Çözme Kullanımı