2012-08-02 11 views
11

मेरे पास एक सूची है, जो खाली या खाली नहीं हो सकती है।जेसन को एक जेसन ऑब्जेक्ट को डंप करने के लिए मजबूर करना जब भी सूची खाली होती है

मैं एक नई फाइल बनाना चाहता हूं जिसमें उस सूची में उस सूची में शामिल है जो मानव-पठनीय और मेरी अगली लिपि के लिए आसान है। जिस स्थिति में सूची खाली नहीं है, यह ठीक काम करता है और मेरी अगली स्क्रिप्ट जेसन फ़ाइल में पढ़ती है। लेकिन जब सूची खाली होती है, तो मुझे "ValueError: कोई JSON ऑब्जेक्ट डीकोड नहीं किया जा सकता है।" यह समझ में आता है, क्योंकि जब मैं फ़ाइल खोलता हूं, वास्तव में कोई सामग्री नहीं होती है और इस प्रकार कोई JSON ऑब्जेक्ट नहीं होता है।

मैं इस तथ्य के साथ ठीक हूं कि कुछ सूचियां खाली हैं। तो, या तो मैं एक खाली JSON ऑब्जेक्ट लिखना चाहता हूं या मैं चाहता हूं कि मेरी पाठक स्क्रिप्ट JSON ऑब्जेक्ट न ढूंढने के साथ ठीक हो।

लेखक स्क्रिप्ट

favColor = [] OR favColor = ['blue'] OR favColor = ['blue', 'green'] 
fileName = 'favoriteColor.json' 
outFile = open(fileName, 'w') 
json.dump(outFile, favColor) 
outFile.close() 

रीडर स्क्रिप्ट

fileName = 'favoriteColor.json' 
inFile = open(fileName, 'r') 
colors = json.load(inFile) 
inFile.close() 

कोई मदद या सुझाव बहुत सराहना:

यहाँ प्रासंगिक कोड है। अगर मुझे ऐसा करने के लिए और अधिक तर्क प्रदान करने की आवश्यकता है, तो मैं इसे भी प्रदान कर सकता हूं, मैंने सोचा कि मैं समस्या को समझने के लिए न्यूनतम आवश्यक से शुरू कर दूंगा।

उत्तर

15

इस के लिए अपने पाठक स्क्रिप्ट संशोधित करें:

with open('favoriteColor.json') as inFile: 
    try: 
     colors = json.load(inFile) 
    except ValueError: 
     colors = [] 

यह एक json के रूप में फ़ाइल को लोड करने का प्रयास करता है। यदि यह मान त्रुटि के कारण विफल रहता है, तो हम जानते हैं कि ऐसा इसलिए है क्योंकि जेसन खाली है। इसलिए हम केवल खाली सूची में रंग असाइन कर सकते हैं। फ़ाइलों को लोड करने के लिए "साथ" निर्माण का उपयोग करना भी बेहतर है क्योंकि यह उन्हें स्वचालित रूप से बंद कर देता है।

+0

अच्छा और साफ +1 –

+0

धन्यवाद, बहुत सराहना की और अच्छी व्याख्या "क्यों खुले() के रूप में ..." पसंद किया जाता है। मैंने लोगों को यह कहते हुए सुना है कि इसे पहले पसंद किया गया है, लेकिन बिना किसी कारण के मुझे इसे बदलने के लिए कभी नहीं मिला। – rcorty

2

मैं जिस दृष्टिकोण को आप कोशिश कर रहा हूं वह नहीं लेगा। मैं बजाय json.dump एक शब्दकोश, जैसे जाएगा:

d = {'var1': '123', 'var2': [1, 2, 3]} 
json.dump(d, fileout) 

फिर dict.get एक उपयुक्त मान में डिफ़ॉल्ट का उपयोग करें:

json_dict = json.load(filein) 
favColor = json_dict.get('favColor', []) 

तो फिर तुम अब भी अनिवार्य मूल्यों है कि अगर [] अंकन का उपयोग मौजूद नहीं सिवाय सकते हैं।

json पारसर्स के बजाय अपने कोड में लापता मूल्यों का तर्क रखता है ...

2

आप भी अपनी json फ़ाइल में वेरिएबल का नाम जोड़ सकते हैं:

json.dump({'favorite-color': favColor}, outFile) 
outFile.close() 

और मामले को संभालने

data = json.load(inFile) 

if len(data['favorite-color']) == 0: 
    ... 

ध्यान दें कि आप उद्देश्य यह है कि आप json.dump करने के लिए फ़ाइल जैसी वस्तु को बचाने और उसके बाद करना चाहते हैं प्रदान करनी चाहिए: एक खाली सूची की जब json फ़ाइल पढ़ने।

संबंधित मुद्दे