इस सवाल का पहले से ही एक उत्तर है: < / P>
- 3 उत्तर
एक सॉकेट एक JSON स्वरूपित प्राप्त करता है स्ट्रिंग और एक से अधिक प्राप्त हो सकता है जिसके परिणामस्वरूप एक ऐसी चर वाली वस्तु हो सकती है:
{'a': '1', 'b': '44'} {'a': '1', 'बी': '44'}
जैसा कि आप देख सकते हैं, यह एक चर में एकाधिक जेएसओएन स्ट्रिंग है। मैं इन्हें पायथन में कैसे व्याख्या कर सकता / सकती हूं?
मेरा मतलब है, क्या अजगर में दो जेसनॉन स्ट्रिंग को एक सरणी में डिकोड करना है, या यह जानने का एक तरीका है कि आउटपुट में दो स्ट्रिंग हो सकती हैं? / P>
उन्हें विभाजित करने के लिए नई लाइनों का उपयोग करना एक अच्छा विचार नहीं है क्योंकि डेटा में वास्तव में नई पंक्तियां हो सकती हैं।
आप मानक JSON पार्सर का उपयोग कर सकते हैं और जब भी उचित JSON स्ट्रिंग के पीछे अतिरिक्त डेटा होता है, तो यह फेंकता वर्णनात्मक अपवाद का उपयोग करें।
वर्तमान में (जो कि, JSON पार्सर का मेरा संस्करण ) इस तरह दिख रहे संदेश वाला एक ValueError
फेंकता है: "अतिरिक्त डेटा: पंक्ति 3 कॉलम 1 - पंक्ति 3 कॉलम 6 (चार 5 - 10)"
।
इस मामले में संख्या 5
(आप उस संदेश से आसानी से पार्स कर सकते हैं) जानकारी कहां पार्सिंग विफल रही है तो अगर आप उस अपवाद को प्राप्त करते हैं, तो आप अपने मूल इनपुट के उपस्ट्रिंग को पार्स कर सकते हैं, अर्थात् उसके पहले के चरित्र तक सब कुछ, और बाद में (मैं पुनरावर्ती का प्रस्ताव देता हूं) बाकी का विश्लेषण करें।
import json, पुनः def jsonMultiParse (s): प्रयास करें: समस्या के रूप में ValueError को छोड़कर json.loads वापस आएँ: m = re.match (r'Extra डेटा: रेखा \ d + column \ d + - line \ d + column \ d + .char (\ d + ) - if not m: raise extraStart = int (m.group (1)) json.loads (s [: extraStart]), jsonMultiParse (s [extraStart:]) प्रिंट jsonMultiParse ( '{} [{}} \ N \ n ["foo", 3]')
प्रिंट होगा:
({}, ([ {}], [उफ़ू ', 3]))
यदि आप नेस्टेड के बजाए सीधे ट्यूपल प्राप्त करना पसंद करते हैं:
वापसी (json.loads (s),)
और
रिटर्न (json.loads (s [: extraStart]),) + jsonMultiParse (s [ExtraStart:])
लौटें:
({}, [{}], [u'foo ', 3])
जनसंपर्क>
Comments
Post a Comment