JSON में शब्दकोश परिवर्तित करना


347
r = {'is_claimed': 'True', 'rating': 3.5}
r = json.dumps(r)
file.write(str(r['rating']))

मैं JSON में अपना डेटा एक्सेस नहीं कर पा रहा हूं। मैं क्या गलत कर रहा हूं?

TypeError: string indices must be integers, not str

जवाबों:


536

json.dumps()एक शब्दकोश को strवस्तु में परिवर्तित करता है , वस्तु को नहीं json(dict)! तो अगर आप लोड करने के लिए अपने strएक में dictका उपयोग करके इसे उपयोग करने के लिए json.loads()विधि

json.dumps()एक बचत विधि के json.loads()रूप में और एक पुनः प्राप्त विधि के रूप में देखें ।

यह कोड नमूना है जो आपको इसे और समझने में मदद कर सकता है:

import json

r = {'is_claimed': 'True', 'rating': 3.5}
r = json.dumps(r)
loaded_r = json.loads(r)
loaded_r['rating'] #Output 3.5
type(r) #Output str
type(loaded_r) #Output dict

11
क्या आपको नहीं लगता कि एक अलग चर में वापस जेंस को लोड करना थोड़ा अक्षम है loaded_r, यह देखते हुए कि आपके पास पहले से ही है r?
टिम

नमस्ते! मुझे लगता है कि यह एक बहुत पुराना उत्तर है, लेकिन मैं उम्मीद कर रहा था कि आप एक बात स्पष्ट कर सकते हैं। @TimCastelijns ने उल्लेख किया कि जोंस को वापस एक नए चर लोडे_r में लोड करना अक्षम है। क्या ऐसा करने का कुशल तरीका सिर्फ r r = json.loads (r) होगा?
SchrodingersStat

2
@SrorodingersStat हाय। मुझे नहीं लगता कि यह प्रदर्शन में बहुत बदलाव करता है। आप 'टाइमिट' फ़ंक्शन का उपयोग करके जांच कर सकते हैं। यदि आप वास्तव में एक फास्ट जोंस लोड / डंप चाहते हैं, तो आप 'ujson' लाइब्रेरी का उपयोग कर सकते हैं!
इमान मिर्ज़ादेह

14
मुझे शक है @TimCastelijns ने इमरान के इरादे को गलत समझा है। JSON को एक नए चर में लोड किया गया है, क्योंकि यह नई जानकारी नहीं है, लेकिन यह दिखाने के लिए कि नए शब्दकोश में मान, यानी JSON के एन्कोड और डिकोड राउंड-ट्रिप के बाद, समान हैं।
dumbledad

43

json.dumps()अजगर के जोंस स्ट्रिंग प्रतिनिधित्व को वापस लौटाता है। डॉक्स देखें

आप ऐसा नहीं कर सकते r['rating']क्योंकि r एक स्ट्रिंग है, अब एक तानाशाही नहीं है

शायद आपका मतलब कुछ ऐसा था

r = {'is_claimed': 'True', 'rating': 3.5}
json = json.dumps(r) # note i gave it a different name
file.write(str(r['rating']))

2

उपयोग करके इसे स्ट्रिंग में बदलने की आवश्यकता नहीं है json.dumps()

r = {'is_claimed': 'True', 'rating': 3.5}
file.write(r['is_claimed'])
file.write(str(r['rating']))

आप सीधे वस्तु से मूल्यों को प्राप्त कर सकते हैं।


1

डिक्शनरी के रूप में परिभाषित करते हुए ट्रिक को करना चाहिए:

>>> r: dict = {'is_claimed': 'True', 'rating': 3.5}
>>> print(r['rating'])
3.5
>>> type(r)
<class 'dict'>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.