Herkesin açıkladığı şeye basit bir örnek ekleyeceğiz,
json.load ()
json.loadfileörneğin, bir dosyanın kendisinin serisini kaldırabilir , örneğin bir nesneyi kabul eder ,
# open a json file for reading and print content using json.load
with open("/xyz/json_data.json", "r") as content:
print(json.load(content))
çıktı olacak,
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Ben kullanırsanız json.loadsyerine dosyayı açmak için,
# you cannot use json.loads on file object
with open("json_data.json", "r") as content:
print(json.loads(content))
Bu hatayı alırdım:
TypeError: beklenen dize veya arabellek
json.loads ()
json.loads() dizinin serisini kaldır.
Bu nedenle kullanmak json.loadsiçin dosyanın içeriğini read()örneğin işlevini kullanarak geçirmem gerekecek.
dosyanın iade içeriği content.read()ile kullanmak json.loads(),
with open("json_data.json", "r") as content:
print(json.loads(content.read()))
Çıktı,
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Çünkü content.read()dize türü , yani<type 'str'>
Ben kullanırsanız json.load()ile content.read(), ben hata alacaksınız,
with open("json_data.json", "r") as content:
print(json.load(content.read()))
, verir
AttributeError: 'str' nesnesinin 'read' özelliği yok
Şimdi, json.loaddeserialze dosyasını biliyorsunuz ve json.loadsbir dizgenin serisini kaldırıyorsunuz.
Başka bir örnek,
sys.stdindönmek filebenim yaptığım eğer öyleyse, nesneyi print(json.load(sys.stdin)), ben gerçek json verileri alacak
cat json_data.json | ./test.py
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Kullanmak istersem onun yerine json.loads()yapardım print(json.loads(sys.stdin.read())).
json.loads(s, *)- Deserializes(astr,bytesya dabytearraybir JSON belgesini içeren örneği) - docs.python.org/3.6/library/json.html