2013-04-07 17 views
10

Mam prosty JSON, w którym liczba nie jest poprawnie przetwarzana.JSON Nie konwertowanie długich liczb odpowiednio

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

Próbowałem @http://www.utilities-online.info/xmltojson/ a wynik był

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

Jak widać .... XML różni się od JSON. Jestem nowy w JSON. Czy czegoś brakuje?

Odpowiedz

8

To jest problem precyzji Javascript.

Według Mozilla Developer Network:

ECMA-262 wymaga jedynie dokładność do 21 cyfr znaczących. Inne implementacje mogą nie obsługiwać dokładności wyższych niż wymagane przez standard.

Źródło: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toPrecision

I wklejony swoją tablicę do konsoli JavaScript Google Chrome i wróciłem to: Javascript precision bug

Tak wygląda Javascript jest zaokrąglanie wartości zanim są one konwertowane do formatu XML. Ponieważ twoja konwersja odbywa się za pośrednictwem Javascript w przeglądarce pod numerem http://www.utilities-online.info/xmltojson/, to ma sens, dlaczego numer został zmieniony.

(Uwaga: Testowałem na Google Chrome w wersji 26.0.1410.43 m przy użyciu Windows 7 Professional)

Edit:

Czy jest jakiś powód, dla którego nie można przekazać te wartości jako ciągi JavaScript?

Spróbuj tego:

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

udało mi się to zrobić i zapisać wartości pomyślnie. Jednak nie będziesz w stanie uruchomić obliczeń matematycznych na nich w JavaScript bez utraty precyzji, chyba że robisz coś takiego jak pomnożenie przez 0, oczywiście.

Javascript precision string workaround

to również konwertowane do formatu XML prawidłowo używając swojego odniesienia http://www.utilities-online.info/xmltojson/.

+0

Próbowałem na IE 9 i Chrome. Zasadniczo, próbuję uzyskać odpowiedź JSON od mojego kontrolera Spring MVC i otrzymuję nieprawidłowe wartości. Użyłem konwertera XML tylko po to, aby pokazać żądanie/odpowiedź. Dzięki! Próbowałem gson i jackson. – Jeet

+0

@Jeet - Zobacz moje ** Edytuj **. Znalazłem obejście, które może działać dla twoich celów. – Aiias

+0

Cóż ... Mogę przekazać je jako struny, ale czy to nie byłby interwencja ręczna? Miałem nadzieję na gotowe rozwiązanie. – Jeet

2

Javascript reprezentuje swoje liczby jako spływy podwójnej precyzji, co ogranicza największą liczbę całkowitą, która może być reprezentowana na + -9007199254740992. Oto dokumentacja ECMA.

Powiązane problemy