Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन JSONDecodeError स्पष्टीकरण और समाधान

कई डेवलपर किसी प्रोग्राम से डेटा को JSON फ़ाइल में संग्रहीत करते हैं; अन्य प्रोग्राम एपीआई को संदर्भित करते हैं जिन्हें JSON के साथ काम करने की आवश्यकता होती है। वास्तव में, आपको JSON, या इसके पायथन समकक्ष, शब्दकोशों के लिए उपयोग के मामले को खोजने में कोई परेशानी नहीं होगी।

जब आप JSON डेटा के साथ काम कर रहे हों तो आपको JSONDecodeError का सामना करना पड़ सकता है। इस गाइड में, हम JSONDecodeError के कारणों और इस त्रुटि को ठीक करने के तरीके के बारे में बात करने जा रहे हैं।

पायथन JSONDecodeError

एक पायथन JSONDecodeError इंगित करता है कि आपके JSON डेटा को स्वरूपित करने के तरीके में कोई समस्या है। उदाहरण के लिए, हो सकता है कि आपके JSON डेटा में कोई कर्ली ब्रैकेट न हो, या उसमें कोई ऐसी कुंजी हो, जिसका कोई मान नहीं है, या उसमें सिंटैक्स का कोई अन्य भाग मौजूद नहीं है।

JSONDecodeError को पूरी तरह से ठीक करने के लिए, आपको यह देखने के लिए JSON फ़ाइल में जाना होगा कि समस्या क्या है। यदि आप भविष्य में आने वाली कई समस्याओं का अनुमान लगाते हैं, तो आप अपने JSONDecodeError को संभालने के लिए ब्लॉक को छोड़कर एक कोशिश का उपयोग करना चाह सकते हैं।

JSONDecodeError कीवर्ड के बाद, आपको एक संक्षिप्त विवरण देखना चाहिए जो त्रुटि के कारण का वर्णन करता है।

सभी ठीक से स्वरूपित JSON इस तरह दिखना चाहिए:

{
	"key": "value"
}

“मान” कोई भी मान्य JSON मान हो सकता है, जैसे सूची, स्ट्रिंग या कोई अन्य JSON ऑब्जेक्ट।

एक उदाहरण परिदृश्य

हम एक प्रोग्राम बना रहे हैं जो JSON ऑब्जेक्ट्स की एक सूची संग्रहीत करता है जो दर्शाता है कि किसी व्यवसाय में कर्मचारियों को कौन से कंप्यूटर जारी किए गए हैं। प्रत्येक JSON ऑब्जेक्ट इस तरह दिखना चाहिए:

81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।

बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।

[
	{
		"name": "Employee Name",
		"equip_id": "000"
	}
]

हम इन JSON ऑब्जेक्ट्स को tools.json नामक फ़ाइल में संग्रहीत करते हैं। फ़ाइल में केवल एक प्रविष्टि है:

[
	{
		"name": "Laura Harper",
		"equip_id" "309"
	}
]

इस डेटा को हमारे प्रोग्राम में पढ़ने के लिए, हम json मॉड्यूल का उपयोग कर सकते हैं:

import json

with open("equipment.json") as file:
	data = json.load(file)

print("Equipment data has been successfully retrieved.")

सबसे पहले, हम json मॉड्यूल आयात करते हैं जिसका उपयोग हम JSON फ़ाइल को पढ़ने के लिए करते हैं। फिर, हम एक open() . का उपयोग करते हैं हमारी JSON फ़ाइल की सामग्री को पढ़ने के लिए कथन। हम कंसोल पर एक संदेश प्रिंट करते हैं जो हमें बताता है कि हमारे स्टेटमेंट के चलने के बाद उपकरण डेटा को पुनः प्राप्त कर लिया गया है।

आइए अपना कोड चलाएं और देखें कि क्या होता है:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "/usr/lib/python3.8/json/__init__.py", line 293, in load
	return loads(fp.read(),
  File "/usr/lib/python3.8/json/__init__.py", line 357, in loads
	return _default_decoder.decode(s)
  File "/usr/lib/python3.8/json/decoder.py", line 337, in decode
	obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.8/json/decoder.py", line 353, in raw_decode
	obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting ':' delimiter: line 4 column 16 (char 47

हमारा कोड एक लंबी त्रुटि देता है। हम देख सकते हैं कि पायथन JSONDecodeError शब्द के बाद हमारी त्रुटि के कारण का वर्णन करता है।

समाधान

हमारा JSONDecodeError हमें बता रहा है कि हम अपने JSON डेटा में एक कोलन (:) खो रहे हैं। यह कोलन कॉलम 16 पर लाइन चार पर दिखाई देना चाहिए। यदि हम अपने उपकरण में डेटा की इस लाइन को देखते हैं। json फ़ाइल, हम देख सकते हैं कि हमारा JSON अमान्य है:

"equip_id" "309",

हमारे कोड में एक कोलन नहीं है। इस त्रुटि को ठीक करने के लिए, हमें एक कोलन जोड़ना चाहिए:

"equip_id": "309",

अब जब हमने अपने डेटा के प्रतिनिधित्व के तरीके से समस्या को ठीक कर लिया है, तो हम अपने प्रोग्राम को फिर से चलाने का प्रयास कर सकते हैं:

Equipment data has been successfully retrieved.

हमारा कोड सफलतापूर्वक निष्पादित होता है।

वैकल्पिक रूप से, हम इस समस्या को संभालने के लिए हैंडलर को छोड़कर एक try… का उपयोग कर सकते हैं ताकि यदि हम किसी अन्य स्वरूपण समस्या का सामना करते हैं तो हमारा कोड तुरंत एक त्रुटि नहीं लौटाएगा:

import json

try:
	with open("equipment.json") as file:
		data = json.load(file)

	print("Equipment data has been successfully retrieved.")
except json.decoder.JSONDecodeError:
	print("There was a problem accessing the equipment data.")

यदि हमारे JSON डेटा में कोई त्रुटि है, तो यह प्रोग्राम वापस आ जाएगा:

There was a problem accessing the equipment data.

अन्यथा, प्रोग्राम डेटा को पढ़ेगा और फिर कंसोल पर निम्न टेक्स्ट प्रदर्शित करेगा:

Equipment data has been successfully retrieved.

निष्कर्ष

पायथन JSONDecodeError इंगित करता है कि कोई समस्या है कि JSON ऑब्जेक्ट को कैसे स्वरूपित किया जाता है। इस त्रुटि को ठीक करने के लिए, आपको त्रुटि संदेश पढ़ना चाहिए और अपने JSON डेटा को ठीक करने में आपका मार्गदर्शन करने के लिए इसका उपयोग करना चाहिए। वैकल्पिक रूप से, आप एक कोशिश का उपयोग कर सकते हैं ... त्रुटि को पकड़ने और संभालने के लिए ब्लॉक को छोड़कर।

क्या आप पायथन कोडिंग के बारे में अधिक जानने में रुचि रखते हैं? हमारी हाउ टू लर्न पायथन गाइड पढ़ें। आपको अपने ज्ञान को बढ़ाने में मदद करने के लिए पायथन सीखने के बारे में विशेषज्ञ सलाह और सीखने के संसाधनों की एक सूची मिलेगी।


  1. पायथन डेटा विश्लेषण और विज़ुअलाइज़ेशन

    पांडा डेटा साइंस और एनालिटिक्स के लिए सबसे लोकप्रिय पायथन लाइब्रेरी में से एक है। पांडा पुस्तकालय का उपयोग डेटा हेरफेर, विश्लेषण और सफाई के लिए किया जाता है। यह निम्न-स्तरीय NumPy पर एक उच्च-स्तरीय अमूर्त है जो विशुद्ध रूप से C में लिखा गया है। इस खंड में, हम कुछ सबसे महत्वपूर्ण (अक्सर उपयोग की जाने

  1. पायथन में डेटा विश्लेषण और विज़ुअलाइज़ेशन?

    पायथन डेटा विश्लेषण और विज़ुअलाइज़ेशन के लिए मुख्य रूप से सुन्न, पांडा, मैटप्लोटलिब, सीबॉर्न आदि के लिए कई पुस्तकालय प्रदान करता है। इस खंड में, हम डेटा विश्लेषण और विज़ुअलाइज़ेशन के लिए पांडा पुस्तकालय पर चर्चा करने जा रहे हैं, जो एक खुला स्रोत पुस्तकालय है जो सुन्न के ऊपर बनाया गया है। यह हमें ते

  1. पायथन जबकि लूप:परिचय और स्पष्टीकरण

    कोडिंग (बेशक) दूसरों की मदद करने के लिए चीजों के निर्माण के बारे में है। हालाँकि, प्रोग्राम और सॉफ़्टवेयर बनाना किसी अन्य चीज़ की तुलना में दोहराए जाने वाले या जटिल कार्यों को स्वचालित करने के साथ अधिक करना है। पायथन का लूप आपको एक साथ कई क्रियाओं को स्वचालित करने के लिए कोड के सूट को दोहराने देता ह