2011-07-06 20 views
36

में NaN भेजना मैं json.dumps() का उपयोग कर पायथन से JSON स्ट्रिंग में फ्लोट औरमें एक सरणी को एन्कोड करने का प्रयास कर रहा हूं।जेसन

लेकिन एन्कोडेड JSON स्ट्रिंग को PHP में सफलतापूर्वक डीकोड नहीं किया जा रहा है। NaN इस समस्या का कारण है? मैं इस स्थिति के आसपास कैसे काम कर सकता हूं?

+0

आउटपुट जेएसओएन कैसा दिखता है? नाइन पायथन में मूल डेटा प्रकार नहीं है, इसलिए मुझे आश्चर्य है कि यह बिल्कुल काम करता है। –

+4

@ डैनियल: दरअसल, यदि आप 'फ्लोट ("नैन") करते हैं, तो आप इसे प्राप्त कर सकते हैं। और 'json.dumps (फ्लोट ("नैन") को कॉल करना)' आपको "NaN" देता है। –

उत्तर

29

json.dumps में allow_nan पैरामीटर है, जो सही पर डिफ़ॉल्ट है।

NaN, इन्फिनिटी और इन्फिनिटी JSON का हिस्सा नहीं हैं, लेकिन वे जावास्क्रिप्ट में मानक हैं, इसलिए इन्हें आमतौर पर एक्सटेंशन का उपयोग किया जाता है। अगर प्राप्तकर्ता उन्हें संभाल नहीं सकता है, तो allow_nan=False सेट करें। लेकिन जब आप NaN को क्रमबद्ध करने का प्रयास करते हैं तो आपको ValueError मिल जाएगा। simplejson का उपयोग कर

11

NaN एक मान्य JSON प्रतीक नहीं है, http://json.org/

आपका एनकोडर पर कल्पना देखना शायद बजाय null के रूप में NaN इनकोडिंग जाना चाहिए था।

+0

जेसन एन्कोडेड स्ट्रिंग में नैन केवल – shreyas

+0

है, आपको इसे ठीक करना होगा, मैन्युअल को देखें http://docs.python.org/library/json.html#basic-usage – Soren

8

प्रयास करें:

pip install simplejson 
तब कोड में

:

import simplejson 

response = df.to_dict('records') 
simplejson.dumps(response, ignore_nan=True,default=datetime.datetime.isoformat) 

ignore_nan झंडा सही ढंग से सभी NaN संभाल लेंगे -> अशक्त रूपांतरण

डिफ़ॉल्ट ध्वज की अनुमति देगा simplejson अपने डेटाटाइम सही ढंग से पार्स करने के लिए।