2010-10-02 17 views
29

में परिवर्तित करें क्या एक जेसन स्ट्रिंग को परिवर्तित करना संभव है (उदाहरण के लिए ट्विटर खोज जेसन सेवा से लौटाया गया है) सरल स्ट्रिंग ऑब्जेक्ट्स में।एक जेसन स्ट्रिंग को पायथन ऑब्जेक्ट

{ 
results:[...], 
"max_id":1346534, 
"since_id":0, 
"refresh_url":"?since_id=26202877001&q=twitter", 
. 
. 
. 
} 

चलें कहना है कि मैं किसी भी तरह, कुछ चर, कहते हैं में परिणाम की दुकान obj: यहाँ json सेवा से लौटे डेटा की एक छोटी प्रतिनिधित्व है। मैं की तरह इस प्रकार उचित मूल्यों को प्राप्त करने के लिए देख रहा हूँ:

print obj.max_id 
print obj.since_id 

मैं simplejson.load() और json.load() उपयोग करने की कोशिश की है, लेकिन यह मेरे simplejson.load() और json.load() लेकिन इसे प्रयोग 'str' object has no attribute 'read'

उत्तर

65

मैं कोशिश की है यह कहते हुए एक त्रुटि दे दी है मुझे यह कहते हुए 'str' object has no attribute 'read'

एक स्ट्रिंग से लोड करने के लिए json.loads() का उपयोग करें (ध्यान दें 'एस') एक त्रुटि दे दी है।

अधिक कुशलता से, एक स्ट्रिंग में प्रतिक्रिया पढ़ने के चरण को छोड़ दें, और केवल json.load() पर प्रतिक्रिया दें।

+0

ओह, नहीं पता था कि मैं एक शब्दकोश मिलता है। वैसे भी इस पल के लिए ठीक है ... – deostroll

0

यदि आप नहीं जानते कि अगर डेटा एक फ़ाइल या एक स्ट्रिंग होगा .... अजगर में निर्मित पुस्तकालयों, json से https://docs.python.org/3/library/io.html#text-i-o

json.loads से

import StringIO as io 
youMagicData={ 
results:[...], 
"max_id":1346534, 
"since_id":0, 
"refresh_url":"?since_id=26202877001&q=twitter", 
. 
. 
. 
} 

magicJsonData=json.loads(io.StringIO(str(youMagicData)))#this is where you need to fix 
print magicJsonData 
#viewing fron the center out... 
#youMagicData{}>str()>fileObject>json.loads 
#json.loads(io.StringIO(str(youMagicData))) works really fast in my program and it would work here so stop wasting both our reputation here and stop down voting because you have to read this twice 

का उपयोग .loads को एक फ़ाइल ऑब्जेक्ट की आवश्यकता होती है और यह जांच नहीं करता कि यह क्या पारित हो गया है, इसलिए यह आपके द्वारा पारित किए गए कार्यों पर अभी भी फ़ंक्शन फ़ंक्शन को कॉल करता है क्योंकि फ़ाइल ऑब्जेक्ट केवल तब डेटा छोड़ देता है जब आप पढ़ते हैं()। इसलिए क्योंकि अंतर्निहित स्ट्रिंग क्लास में पढ़ने के फ़ंक्शन नहीं हैं, इसलिए हमें एक रैपर की आवश्यकता होती है। तो StringIO.StringIO फ़ंक्शन में संक्षिप्त, स्ट्रिंग क्लास और फ़ाइल क्लास को उप-वर्गों और आंतरिक वर्किंग्स को मेसिंग करने से मेरा कम विवरण https://gist.github.com/fenderrex/843d25ff5b0970d7e90e6c1d7e4a06b1 पुनर्निर्माण करता है ताकि सभी को अंत में एक रैम फ़ाइल लिखने और इसे एक पंक्ति में बाहर करने के अंत में। ...

0
magicJsonData=json.loads(io.StringIO((youMagicData).decode("utf-8")) 
print(magicJsonData) 

किसी भी अनुरोध या http सर्वर से json स्ट्रिंग (, सही के बाद से सवाल यह है कि बाइट सरणी के बारे में सर्वर अनुरोध से लौटे?) के प्रकार बाइट सरणी है, स्ट्रिंग के लिए उन्हें बदलने के लिए

res = json.loads((response.content).decode("utf-8")) 
print(res) 

यहां response.content एक बाइट सरणी हो सकता है या सर्वर अनुरोध से किसी भी लौटाई गई स्ट्रिंग जिसे स्ट्रिंग (utf-8) प्रारूप में डीकोड किया गया है और पाइथन सरणी के रूप में लौटाया गया है।

या सिर्फ एक bytearray का उपयोग लेकिन json.load का उपयोग बजाय json.loads

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