दिलचस्प पोस्ट
CRTP का उपयोग करते समय त्रुटियों से कैसे बचें? सीएसएस: पहलू अनुपात रखते हुए 100% चौड़ाई या ऊंचाई? जावा InetAddress.getLocalHost (); 127.0.0.1 रिटर्न … कैसे असली आईपी पाने के लिए? रेजर व्यू पृष्ठ में मैं एक नेमस्पेस कैसे आयात करूँ? एक स्तर से अवांछित सरणी async / await – जब कार्य को शून्य से वापस लौटाया जाए? xxxxxx.exe वैध Win32 अनुप्रयोग नहीं है डायनामिक रूप से स्ट्रिंग के आधार पर PHP ऑब्जेक्ट बनाएं ऊंचाई: 100% इंटरनेट एक्सप्लोरर में काम नहीं कर रहा है जावा जावा में छवि जोड़ें अजैक्स में JSON के रूप में SQL तालिका को वापस लौटाएं java.lang.IllegalArgumentException: एक पथ विभाजक है सभी व्यू नियंत्रकों के पास एक बटन बनाते रहना पैकेजिंग ईजेबी जावाए 6 युद्ध बनाम ईएआर में मैं सी # में प्रगति बार कैसे लागू करूं?

पायथन json.loads `मान त्रुटि के साथ विफल: अमान्य नियंत्रण वर्ण: 1 पंक्ति 33 स्तंभ (33)

मेरे पास इस तरह की स्ट्रिंग है:

s = u"""{"desc": "\u73cd\u54c1\u7f51-\u5168\u7403\u6f6e\u6d41\u5962\u54c1\u7f51\u7edc\u96f6\u552e\u5546 <br \/>\r\nhttp:\/\/www.zhenpin.com\/ <br \/>\r\n<br \/>\r\n200\u591a\u4e2a\u56fd\u9645\u4e00\u7ebf\u54c1\u724c\uff0c\u9876\u7ea7\u4e70\u624b\u5168\u7403\u91c7\u8d2d\uff0c100%\u6b63\u54c1\u4fdd\u969c\uff0c7\u5929\u65e0\u6761\u2026"}""" 

json.loads(s) इस तरह त्रुटि संदेश देता है:

 ValueError: Invalid control character at: line 1 column 33 (char 33) 

यह त्रुटि क्यों होती है? इस समस्या का समाधान किस प्रकार से किया जा सकता है?

Solutions Collecting From Web of "पायथन json.loads `मान त्रुटि के साथ विफल: अमान्य नियंत्रण वर्ण: 1 पंक्ति 33 स्तंभ (33)"

समस्या यह है कि आपके यूनिकोड स्ट्रिंग में कैरस रिटर्न ( \r ) और नई लाइनें ( \n ) JSON डेटा में स्ट्रिंग के भीतर होती हैं । अगर वे स्ट्रिंग का हिस्सा बनने के लिए थे, तो उन्हें उचित रूप से भाग जाना चाहिए। यदि वे स्ट्रिंग का हिस्सा नहीं बनना चाहते थे, तो वे आपके JSON में नहीं होना चाहिए

यदि आप JSON स्ट्रिंग को मान्य JSON का निर्माण करने के लिए इसे ठीक नहीं कर पा रहे हैं, तो आप या तो अपमानजनक वर्णों को निकाल सकते हैं:

 >>> json.loads(s.replace('\r\n', '')) 

या उन्हें मैन्युअल रूप से बचें:

 >>> json.loads(s.replace('\r\n', '\\r\\n')) 

एक अन्य विकल्प, शायद, strict=False तर्क का उपयोग करना है

http://docs.python.org/2/library/json.html के अनुसार

"यदि कड़ाई से असत्य (सच है तो डिफ़ॉल्ट है), तो कंट्रोल वर्णों को स्ट्रिंग्स के अंदर की अनुमति दी जाएगी। इस संदर्भ में कंट्रोल वर्ण, 0-31 श्रृंखला में वर्ण कोड वाले हैं, जिसमें '\ t' (टैब), '\ n ',' \ r 'और' \ 0 '। "

उदाहरण के लिए:

 json.loads(json_str, strict=False) 

समस्या ये है कि सूचकांक 33 में चरित्र एक कैरिज रिटर्न कंट्रोल वर्ण है।

 >>> s[33] u'\r' 

JSON युक्ति के अनुसार, वैध वर्ण हैं:

  • इसके अलावा कोई भी यूनिकोड वर्ण: " , \ , और नियंत्रण-वर्ण ( ord(char) < 32 )।

  • \" , \\ , \/ , \b (बैकस्पेस), \f (फॉर्म फीड), \n (लाइन-फीड / नई-लाइन), \r (कैरेज रिटर्न), \t (टैब), या फिर चार हेक्साडेसिमल अंकों के साथ।

हालाँकि, पायथन में आप कंट्रोल अक्षरों से बचने के लिए दोहराएंगे (जब तक कि स्ट्रिंग कच्चे नहीं है) क्योंकि पायथन उन नियंत्रण वर्णों को भी व्याख्या करता है।

 >>> s = ur"""{"desc": "\u73cd\u54c1\u7f51-\u5168\u7403\u6f6e\u6d41\u5962\u54c1\u7f51\u7edc\u96f6\u552e\u5546 <br \/>\r\nhttp:\/\/www.zhenpin.com\/ <br \/>\r\n<br \/>\r\n200\u591a\u4e2a\u56fd\u9645\u4e00\u7ebf\u54c1\u724c\uff0c\u9876\u7ea7\u4e70\u624b\u5168\u7403\u91c7\u8d2d\uff0c100%\u6b63\u54c1\u4fdd\u969c\uff0c7\u5929\u65e0\u6761\u2026"}""" >>> json.loads(s) {u'desc': u'\u73cd\u54c1\u7f51-\u5168\u7403\u6f6e\u6d41\u5962\u54c1\u7f51\u7edc\u96f6\u552e\u5546 <br />\r\nhttp://www.zhenpin.com/ <br />\r\n<br />\r\n200\u591a\u4e2a\u56fd\u9645\u4e00\u7ebf\u54c1\u724c\uff0c\u9876\u7ea7\u4e70\u624b\u5168\u7403\u91c7\u8d2d\uff0c100%\u6b63\u54c1\u4fdd\u969c\uff0c7\u5929\u65e0\u6761\u2026'} 

संदर्भ:

अपने \n और \r से बचने की कोशिश करें:

 s = s.replace('\r', '\\r').replace('\n', '\\n') json.loads(s) >>> {u'desc': u'\u73cd\u54c1\u7f51-\u5168\u7403\u6f6e\u6d41\u5962\u54c1\u7f51\u7edc\u96f6\u552e\u5546 <br />\r\nhttp://www.zhenpin.com/ <br />\r\n<br />\r\n200\u591a\u4e2a\u56fd\u9645\u4e00\u7ebf\u54c1\u724c\uff0c\u9876\u7ea7\u4e70\u624b\u5168\u7403\u91c7\u8d2d\uff0c100%\u6b63\u54c1\u4fdd\u969c\uff0c7\u5929\u65e0\u6761\u2026'} 

कुछ मामलों में, यह त्रुटि तब उठायी जाएगी जब फ़ाइल में वास्तव में एक सफेद स्थान के साथ एक स्ट्रिंग होती है सफेद स्थान को हटाना समस्या का समाधान करेगा।