पायथन जॉन्सन: एनकोड (डंप), डिकोड (लोड) json डाटा & फ़ाइल (उदाहरण)

विषय - सूची:

Anonim

JSON क्या है?

JSON डेटा विनिमय के लिए एक मानक प्रारूप है, जो जावास्क्रिप्ट से प्रेरित है। आमतौर पर, JSON स्ट्रिंग या टेक्स्ट फॉर्मेट में होता है। JSON का मतलब J ava S cript O bject N otation है ।

JSON का सिंटैक्स: JSON कुंजी और मूल्य जोड़ी के रूप में लिखा जाता है।

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

JSON पायथन शब्दकोश से काफी मिलता-जुलता है । पायथन JSON का समर्थन करता है, और इसमें JSON के रूप में एक इनबिल्ट लाइब्रेरी है।

पाइथन में JSON लाइब्रेरी

पाइथन के ' मार्शाल ' और ' अचार' बाहरी मॉड्यूल JSON लाइब्रेरी के एक संस्करण को बनाए रखते हैं । पायसन में एन्कोडिंग और डिकोडिंग जैसे JSON से संबंधित ऑपरेशन करने के लिए, आपको JSON लाइब्रेरी को आयात करने के लिए सबसे पहले और इसके लिए आवश्यक है कि आपके .py ,।

import json

JSON मॉड्यूल में निम्नलिखित तरीके उपलब्ध हैं

तरीका विवरण
डंप () JSON ऑब्जेक्ट्स के लिए एन्कोडिंग
डंप () फ़ाइल पर एन्कोडेड स्ट्रिंग लेखन
भार () JSON स्ट्रिंग को डिकोड करें
भार() JSON फ़ाइल पढ़ते समय डिकोड करें

पायथन से JSON (एन्कोडिंग)

पायथन की JSON लाइब्रेरी डिफ़ॉल्ट रूप से JSON ऑब्जेक्ट्स में पायथन ऑब्जेक्ट्स के अनुवाद का अनुसरण करती है

अजगर JSON
तानाशाही वस्तु
सूची सरणी
यूनिकोड तार
संख्या - इंट, लंबे संख्या - int
नाव संख्या - वास्तविक
सच सच
असत्य असत्य
कोई नहीं शून्य

पाइथन डेटा को JSON में बदलना एक एनकोडिंग ऑपरेशन कहलाता है। JSON लाइब्रेरी पद्धति की मदद से एन्कोडिंग किया जाता है - डंप ()

डंप्स () विधि अजगर के शब्दकोश वस्तु को JSON स्ट्रिंग डेटा प्रारूप में परिवर्तित करता है।

अब हम पायथन के साथ अपना पहला एन्कोडिंग उदाहरण प्रस्तुत करते हैं।

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)

आउटपुट:

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

आइए एक ही फ़ंक्शन डंप () का उपयोग करके शब्दकोश की एक JSON फ़ाइल बनाएं

# 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)

आउटपुट:

दिखाने के लिए कुछ भी नहीं

… आपके सिस्टम में json_file.json बनाया गया है, आप उस फ़ाइल को देख सकते हैं।

JSON to Python (डिकोडिंग)

JSON स्ट्रिंग डिकोडिंग पाइथन में JSON लाइब्रेरी के इनबिल्ट विधि लोड () और लोड () की मदद से किया जाता है । यहां अनुवाद तालिका में JSON ऑब्जेक्ट्स का उदाहरण Python ऑब्जेक्ट्स से है जो JSON स्ट्रिंग के Python में डिकोडिंग करने में सहायक हैं।

JSON अजगर
वस्तु तानाशाही
सरणी सूची
तार यूनिकोड
संख्या - int संख्या - इंट, लंबे
संख्या - वास्तविक नाव
सच सच
असत्य असत्य
शून्य कोई नहीं

आइए json.loads () फ़ंक्शन की सहायता से पायथन में डिकोडिंग का एक मूल उदाहरण देखें ,

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

आउटपुट:

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

पायसन में JSON फ़ाइल या पार्सिंग JSON फ़ाइल डिकोड करना

नोट: JSON फ़ाइल को डिकोड करना फ़ाइल इनपुट / आउटपुट (I / O) संबंधित ऑपरेशन है। JSON फाइल आपके सिस्टम में उस स्थान पर मौजूद होनी चाहिए जिसका उल्लेख आप अपने प्रोग्राम में करते हैं।

उदाहरण,

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)

यहाँ डेटा पाइथन की एक शब्दकोश वस्तु है।

आउटपुट:

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

पायथन में कॉम्पैक्ट एनकोडिंग

जब आपको अपनी JSON फ़ाइल का आकार कम करने की आवश्यकता होती है, तो आप Python में कॉम्पैक्ट एन्कोडिंग का उपयोग कर सकते हैं।

उदाहरण,

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)

आउटपुट:

'["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 कोड (सुंदर प्रिंट)

  • उद्देश्य मानव समझ के लिए अच्छी तरह से स्वरूपित कोड लिखना है। सुंदर प्रिंटिंग की मदद से कोई भी आसानी से कोड को समझ सकता है।
  • उदाहरण,
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)

आउटपुट:

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

इसे बेहतर समझने के लिए, इंडेंट को 40 में बदलें और आउटपुट का निरीक्षण करें-

JSON कोड ऑर्डर करना:

dps में सॉर्ट_की विशेषता () फ़ंक्शन का तर्क JSON में आरोही क्रम में कुंजी को सॉर्ट करेगा। Sort_keys तर्क एक बूलियन विशेषता है। जब यह सच है छँटाई अनुमति है अन्यथा नहीं

उदाहरण,

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)

आउटपुट:

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

जैसा कि आप कुंजियों की आयु देख सकते हैं, कारों, बच्चों आदि को आरोही क्रम में व्यवस्थित किया गया है।

पायथन की जटिल वस्तु एन्कोडिंग

एक कॉम्प्लेक्स ऑब्जेक्ट में दो अलग-अलग हिस्से होते हैं

  1. असली हिस्सा
  2. काल्पनिक हिस्सा

उदाहरण: 3 + 2i

एक जटिल वस्तु की एन्कोडिंग करने से पहले, आपको एक चर को जटिल है या नहीं, इसकी जांच करने की आवश्यकता है। आपको एक फ़ंक्शन बनाने की ज़रूरत है जो एक चर विधि का उपयोग करके चर में संग्रहीत मूल्य की जांच करता है।

आइए बनाएं चेक के लिए विशिष्ट फ़ंक्शन जटिल है या एन्कोडिंग के लिए योग्य है।

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)

आउटपुट:

'[4.0, 5.0]'

पायथन में कॉम्प्लेक्स JSON ऑब्जेक्ट डिकोडिंग

JSON में जटिल ऑब्जेक्ट को डीकोड करने के लिए, object_hook पैरामीटर का उपयोग करें जो चेक करता है कि JSON स्ट्रिंग में जटिल ऑब्जेक्ट है या नहीं। उदाहरण,

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)

आउटपुट:

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

JSON Serialization क्लास JSONEncoder का अवलोकन

एन्कोडिंग करते समय किसी भी पायथन ऑब्जेक्ट के क्रमांकन के लिए JSONEncoder वर्ग का उपयोग किया जाता है। इसमें एन्कोडिंग के तीन अलग-अलग तरीके हैं जो हैं

  • डिफ़ॉल्ट (ओ) - उपवर्ग में लागू किया गया है और ऑब्जेक्ट के लिए क्रमबद्ध ऑब्जेक्ट लौटाता है ।
  • सांकेतिक शब्दों में बदलना (ओ) - json.dumps () विधि के रूप में एक ही अजगर डेटा संरचना के JSON स्ट्रिंग लौटें।
  • iterencode (o) - एक के बाद एक स्ट्रिंग का प्रतिनिधित्व करते हैं और ऑब्जेक्ट ओ को एनकोड करते हैं।

JSONEncoder class के encode () तरीके की मदद से हम किसी Python ऑब्जेक्ट को भी एनकोड कर सकते हैं।

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

आउटपुट:

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

JSON देशिकरण वर्ग का अवलोकन JSONDecoder

JSONDecoder वर्ग का उपयोग डिकोडिंग करते समय किसी भी पायथन ऑब्जेक्ट के डीरिएरलाइज़ेशन के लिए किया जाता है। इसमें डिकोडिंग के तीन अलग-अलग तरीके हैं जो हैं

  • default (o) - उपवर्ग में लागू किया गया और deserialized object o object लौटाया गया ।
  • डिकोड (o) - json.loads () विधि के रूप में ही JSON स्ट्रिंग या डेटा की पायथन डेटा संरचना लौटाता है।
  • raw_decode (o) - प्रतिनिधि पायथन शब्दकोश एक-एक करके और ऑब्जेक्ट ओ को डिकोड करता है।

JSONDecoder वर्ग के डिकोड () विधि की सहायता से, हम JSON स्ट्रिंग को भी डिकोड कर सकते हैं।

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

आउटपुट:

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

URL से JSON डेटा डिकोड करना: वास्तविक जीवन उदाहरण

हम निर्दिष्ट URL (https://feeds.citibikenyc.com/stations/stations.json) से सिटीबाइक NYC (बाइक शेयरिंग सिस्टम) का डेटा प्राप्त करेंगे और शब्दकोश प्रारूप में परिवर्तित करेंगे।

उदाहरण,

नोट: - सुनिश्चित करें कि पुस्तकालय आपके पाइथन में पहले से ही स्थापित है, यदि नहीं तो टर्मिनल या सीएमडी खोलें और टाइप करें

  • (पायथन 3 या उससे अधिक के लिए) pip3 इंस्टॉल अनुरोध
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])

आउटपुट:

{'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': ''}

पायथन में JSON लाइब्रेरी से संबंधित अपवाद:

  • क्लास json.JSONDecoderError डिकोडिंग ऑपरेशन से संबंधित अपवाद को संभालता है। और यह ValueError का एक उपवर्ग है
  • अपवाद - json.JSONDecoderError (संदेश, डॉक्टर)
  • अपवाद के पैरामीटर हैं,
    • संदेश - त्रुटि संदेश त्रुटि रहित
    • डॉक्टर - JSON डॉक्स पार्स
    • स्थिति - जब यह विफल हो तो डॉक्टर का सूचकांक शुरू करें
    • लाइनो - लाइन नो शो पोज के अनुरूप है
    • बृहदान्त्र - स्तंभ कोई पोज के अनुरूप नहीं है

उदाहरण,

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

पायथन में अनंत और NaN नंबर

JSON डेटा इंटरचेंज फॉर्मेट (RFC - रिक्वेस्ट फॉर कमेंट्स) अनंत या नैनो वैल्यू की अनुमति नहीं देता है, लेकिन अनंत और नैन वैल्यू संबंधित ऑपरेशन करने के लिए पायथन- JSON लाइब्रेरी में कोई प्रतिबंध नहीं है। अगर JSON को INFINITE और नैन डेटाटाइप मिलता है, तो इसे शाब्दिक में बदल दिया जाता है।

उदाहरण,

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

आउटपुट:

InfinityNaNinf

JSON स्ट्रिंग में बार-बार कुंजी

RFC निर्दिष्ट करता है कि JSON ऑब्जेक्ट में कुंजी नाम अद्वितीय होना चाहिए, लेकिन यह अनिवार्य नहीं है। पाइथन JSON लाइब्रेरी JSON में बार-बार आने वाली वस्तुओं के अपवाद को नहीं बढ़ाती है। यह सभी दोहराया कुंजी-मूल्य जोड़ी को अनदेखा करता है और उनके बीच केवल अंतिम कुंजी-मूल्य जोड़ी मानता है।

  • उदाहरण,
import jsonrepeat_pair = '{"a": 1, "a": 2, "a": 3}'json.loads(repeat_pair)

आउटपुट:

{'a': 3}

पायथन में JSON के साथ CLI (कमांड लाइन इंटरफ़ेस)

json.tool JSON को सुंदर-प्रिंट सिंटैक्स को मान्य करने के लिए कमांड लाइन इंटरफ़ेस प्रदान करता है। आइए CLI का एक उदाहरण देखते हैं

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

आउटपुट:

{"name": " Kings Authur "}

पायथन में JSON के लाभ

  • कंटेनर और मान के बीच वापस जाना आसान (JSON to Python और Python to JSON)
  • मानव पठनीय (सुंदर-प्रिंट) JSON ऑब्जेक्ट
  • डेटा हैंडलिंग में व्यापक रूप से उपयोग किया जाता है।
  • एकल फ़ाइल में समान डेटा संरचना नहीं है।

पायथन में JSON के कार्यान्वयन की सीमा

  • JSON रेंज और एक नंबर की भविष्यवाणी के deserializer में
  • JSON स्ट्रिंग की अधिकतम लंबाई और JSON और ऑब्जेक्ट के स्तर के घोंसले के शिकार।

झूठा कोड

json.dumps (person_data)

JSON ऑब्जेक्ट बनाएँ

json.dump (person_data, file_write)

पायथन की फ़ाइल I / O का उपयोग करके JSON फ़ाइल बनाएँ

Compact_obj = json.dumps (डेटा, विभाजक = (',', ':'))

कॉम्पैक्ट JSON ऑब्जेक्ट विभाजक का उपयोग करके JSON ऑब्जेक्ट से अंतरिक्ष चरित्र को हटाकर

formatted_obj = json.dumps (dic, indent = 4, विभाजक = (',', ','))

इंडेंट का उपयोग करके JSON कोड फ़ॉर्मेट करना

Sorted_string = json.dumps (x, indent = 4, Sort_keys = True)

अल्फाबेटिक ऑर्डर द्वारा JSON ऑब्जेक्ट कुंजी को सॉर्ट करना

complex_obj = json.dumps (4 + 5j, डिफ़ॉल्ट = complex_encode)

JSON में पायथन कॉम्प्लेक्स ऑब्जेक्ट एन्कोडिंग

JSONEncoder ()। सांकेतिक शब्दों में बदलना (colour_dict)

सीरियलाइजेशन के लिए JSONEncoder Class का उपयोग

json.loads (data_string)

JSON.loads () फ़ंक्शन का उपयोग करके पायथन डिक्शनरी में JSON स्ट्रिंग को डिकोड करना

json.loads ('{"__ complex__": true, "real": 4, "img": 5}', object_hook = is_complex)

अजगर के लिए जटिल JSON ऑब्जेक्ट का डिकोडिंग

JSONDecoder ()। डीकोड (colour_string)

Deserialization के साथ पायथन को डेक्कन JSON का उपयोग