2013-04-07 11 views
10

Ho un semplice JSON in cui il numero non viene analizzato correttamente.JSON Non converte correttamente numeri lunghi

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

ho provato @http://www.utilities-online.info/xmltojson/ e il risultato è stato

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

Come si può vedere .... l'XML è diverso da JSON. Sono nuovo di JSON. Mi sto perdendo qualcosa?

risposta

8

Questo è un problema di precisione Javascript.

Secondo Mozilla Developer Network:

ECMA-262 richiede solo una precisione fino a 21 cifre significative. Altre implementazioni potrebbero non supportare le precisioni superiori a quelle richieste dallo standard.

Fonte: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toPrecision

ho incollato la matrice nella console JavaScript di Google Chrome e tornato questo: Javascript precision bug

così sembra che Javascript è arrotondamento dei valori prima di essi vengono convertiti in XML. Poiché la conversione viene eseguita tramite Javascript nel browser allo http://www.utilities-online.info/xmltojson/, è logico che il numero sia stato modificato.

(Nota: ho testato su Google Chrome versione 26.0.1410.43 m utilizzando Windows 7 Professional)

Edit:

C'è qualche motivo per cui non è possibile passare questi valori a JavaScript come stringhe?

Prova questo:

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

sono stato in grado di fare questo e salvare i valori con successo. Tuttavia, non potrai eseguire calcoli matematici su di essi in Javascript senza perdere precisione, a meno che tu non stia facendo qualcosa come moltiplicare per 0, ovviamente.

Javascript precision string workaround

Questo anche convertito in XML correttamente utilizzando il vostro riferimento http://www.utilities-online.info/xmltojson/.

+0

Ho provato su IE 9 e Chrome. Fondamentalmente, sto cercando di ottenere una risposta JSON dal mio controller Spring MVC e sto ottenendo valori non validi. Ho usato il convertitore XML solo per mostrare la richiesta/risposta. Grazie! Ho provato Gson e Jackson. – Jeet

+0

@Jeet - Vedi il mio ** Modifica **. Ho trovato una soluzione alternativa che potrebbe funzionare per i tuoi scopi. – Aiias

+0

Bene ... Posso passarli come stringhe, ma non sarebbe un intervento manuale? Speravo in una soluzione pronta per l'uso. – Jeet

2

Javascript rappresenta i suoi numeri come galleggianti a doppia precisione che limita il numero intero più grande che può essere rappresentato in + -9007199254740992. Ecco la documentazione ECMA.

Problemi correlati