2013-04-07 7 views
10

मेरे पास एक साधारण JSON है जहां संख्या ठीक से पार्स नहीं हो रही है।JSON उचित संख्याओं को उचित रूप से परिवर्तित नहीं कर रहा है

[ 
    { 
    "orderNumber": 1, 
    "customerId": 228930314431312345, 
    "shoppingCartId": 22893031443137109, 
    "firstName": "jjj" 
    } 
] 

मैं @http://www.utilities-online.info/xmltojson/ यह कोशिश की और परिणाम था

<?xml version="1.0" encoding="UTF-8" ?> 
<orderNumber>1</orderNumber> 
<customerId>228930314431312350</customerId> 
<shoppingCartId>22893031443137108</shoppingCartId> 
<firstName>jjj</firstName> 

आप देख सकते हैं .... एक्सएमएल JSON से अलग है। मैं JSON के लिए नया हूँ। क्या मैं कुछ भूल रहा हूँ?

उत्तर

8

यह एक जावास्क्रिप्ट सटीक समस्या है।

मोज़िला डेवलपर नेटवर्क के अनुसार:

ECMA-262 केवल अप करने के लिए 21 महत्वपूर्ण अंक की परिशुद्धता की आवश्यकता है। अन्य कार्यान्वयन मानक द्वारा आवश्यक परिशुद्धता का समर्थन नहीं कर सकते हैं।

स्रोत: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toPrecision

मैं गूगल क्रोम का JavaScript कंसोल में अपने सरणी चिपकाया और वापस यह मिल गया: Javascript precision bug

तो ऐसा लगता है जैसे Javascript मूल्यों गोलाई है इससे पहले कि वे एक्सएमएल के लिए परिवर्तित किया जा रहा है। चूंकि आपका रूपांतरण ब्राउज़र में जावास्क्रिप्ट के माध्यम से http://www.utilities-online.info/xmltojson/ पर किया जा रहा है, इसलिए यह समझ में आता है कि संख्या क्यों बदल दी गई थी।

(नोट: मैं विंडोज 7 प्रोफेशनल का उपयोग कर गूगल क्रोम संस्करण 26.0.1410.43 मीटर पर परीक्षण)

संपादित करें:

वहाँ किसी भी कारण है कि आप तारों के रूप में जावास्क्रिप्ट को इन मूल्यों को पारित नहीं हो सकता है?

इस प्रयास करें:

[ 
    { 
    "orderNumber": "1", 
    "customerId": "228930314431312345", 
    "shoppingCartId": "22893031443137109", 
    "firstName": "jjj" 
    } 
] 

मैं यह करने में सक्षम था और मूल्यों को सफलतापूर्वक सेव करें। हालांकि, आप कुछ सटीकता खोए बिना जावास्क्रिप्ट में गणित की गणना चलाने में सक्षम नहीं होंगे, जब तक कि आप 0 से गुणा करने की तरह कुछ नहीं कर रहे हैं।

Javascript precision string workaround

यह भी एक्सएमएल सही ढंग से अपने संदर्भ http://www.utilities-online.info/xmltojson/ उपयोग करने के लिए बदल दिया।

+0

मैंने आईई 9 और क्रोम पर कोशिश की थी। असल में, मैं अपने स्प्रिंग एमवीसी नियंत्रक से JSON प्रतिक्रिया प्राप्त करने का प्रयास कर रहा हूं और मुझे अमान्य मान मिल रहा है। मैंने अनुरोध/प्रतिक्रिया दिखाने के लिए एक्सएमएल कनवर्टर का इस्तेमाल किया। धन्यवाद! मैंने जीसन और जैक्सन की कोशिश की। – Jeet

+0

@Jeet - मेरा ** संपादित करें ** देखें। मुझे एक समाधान मिला है जो आपके उद्देश्यों के लिए काम कर सकता है। – Aiias

+0

खैर..मैं उन्हें तारों के रूप में पास कर सकता हूं, लेकिन क्या यह मैन्युअल हस्तक्षेप नहीं होगा? मैं बॉक्स समाधान से बाहर निकलने की उम्मीद कर रहा था। – Jeet

2

जावास्क्रिप्ट अपनी संख्या को डबल परिशुद्धता फ्लोट के रूप में दर्शाता है जो सबसे बड़ा पूर्णांक संख्या को सीमित करता है जिसे + -9007199254740992 पर प्रदर्शित किया जा सकता है। ECMA दस्तावेज यहां है।

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