2016-09-14 1 views
10

मैं पाइथन में JSON ऑब्जेक्ट्स लोड करने का एक अच्छा तरीका जानने का प्रयास कर रहा हूं। मैं इस json डेटा भेजने: बैकएंड जहां यह एक स्ट्रिंग के रूप में प्राप्त हो जाएगा तो मैं json.loads(data) इस्तेमाल किया यह पार्स करने के लिए करने के लिएपायथन/जेसन: दोहरे उद्धरणों में संलग्न संपत्ति का नाम

{'http://example.org/about': {'http://purl.org/dc/terms/title': [{'type': 'literal', 'value': "Anna's Homepage"}]}} 

लेकिन हर बार मैं एक ही अपवाद है:

ValueError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1) 

मैं इसे googled लेकिन कुछ भी इस समाधान json.loads(json.dumps(data)) व्यक्तिगत रूप से मेरे लिए है कि कुशल लगता है जो नहीं के अलावा काम करने के लिए है, क्योंकि यह भी जिनके पास डेटा के किसी भी प्रकार को स्वीकार लगता है जो जेसन प्रारूप में नहीं हैं।

किसी भी सुझाव की बहुत सराहना की जाएगी।

उत्तर

23

इस के बजाय ast.literal_eval() इस्तेमाल कर सकते हैं:

{'http://example.org/about': {'http://purl.org/dc/terms/title': [{'type': 'literal', 'value': "Anna's Homepage"}]}} 

JSON नहीं है।
यह:

{"http://example.org/about": {"http://purl.org/dc/terms/title": [{"type": "literal", "value": "Anna's Homepage"}]}} 

JSON है।

+0

थानक्स का आह्वान करने से पहले सभी सिंगल्स को युगल करने के लिए स्ट्रिंग-विकल्प है। मैंने उस पर ध्यान नहीं दिया, मैं डेटा भेजते समय सही जेसन प्रारूप का उपयोग कर रहा हूं लेकिन जब बैकएंड पर प्राप्त होता है तो डबल कोट्स को एक से बदल दिया जाता है! इसलिए मुझे वह अपवाद मिला। – raeX

4

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

आपको डेटा के स्रोत को ठीक करने की आवश्यकता है।

3

JSON तारों को डबल कोट्स का उपयोग करना चाहिए। JSON पायथन लाइब्रेरी इसे लागू करती है ताकि आप अपनी स्ट्रिंग लोड करने में असमर्थ हों। आपका डेटा इसी तरह देखने के लिए की जरूरत है:

{"http://example.org/about": {"http://purl.org/dc/terms/title": [{"type": "literal", "value": "Anna's Homepage"}]}} 

हैं कि कुछ आप कर सकते हैं नहीं है, आप json.loads()

+3

कि अजगर पुस्तकालय का एक प्रतिबंध नहीं है की तरह दिखना चाहिए, लेकिन JSON प्रारूप में ही की। –

+0

आप सही हैं। हालांकि, कुछ JSON पार्सर्स डबल कोट्स को लागू नहीं करते हैं। मैं अपना जवाब अपडेट करूंगा। – alexbclay

+0

ने यह नहीं दिया- जेएसओएन के पास एकल-उद्धृत तारों के अंदर कभी भी कोई डबल कोट नहीं है, आपको बस इतना करना है कि 'json.loads() ' – nigel222

3

मैं अपने JSON डेटा

{'http://example.org/about': {'http://purl.org/dc/terms/title': [{'type': 'literal', 'value': "Anna's Homepage"}]}} 
http://jsonlint.com/ में

जांच की है और परिणाम इस प्रकार थे

{ 
    "http://example.org/about": { 
     "http://purl.org/dc/terms/title": [{ 
      "type": "literal", 
      "value": "Anna's Homepage" 
     }] 
    } 
} 
2

:

Error: Parse error on line 1: 
{ 'http://example.org/ 
--^ 
Expecting 'STRING', '}', got 'undefined' 

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

{"http://example.org/about": {"http://purl.org/dc/terms/title": [{"type": "literal", "value": "Anna's Homepage"}]}} 
संबंधित मुद्दे