2013-04-07 22 views
10

Numaranın düzgün ayrıştırılmadığı basit bir JSON'ım var.JSON Uzun sayıları uygun şekilde dönüştürmüyor

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

Ben http://www.utilities-online.info/xmltojson/ @ denedim ve sonuç Gördüğünüz gibi .... XML JSON'dan farklıdır

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

oldu. JSON için yeniyim. Bir şey mi eksik?

cevap

8

Bu bir Javascript hassasiyet sorunudur. Mozilla Developer Network göre

:

ECMA-262 sadece en fazla 21 anlamlı basamak bir hassasiyet gerektirir. Diğer uygulamalar, standardın gerektirdiğinden daha yüksek kesinleri desteklemeyebilir.

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

Google Chrome'un JavaScript konsoluna dizinizi yapıştırılan ve geri aldım: onlar XML dönüştürülen önce JavaScript değerleri yuvarlama gibi Javascript precision bug

Yani görünüyor. Dönüşümünüz, tarayıcıda Javascript aracılığıyla http://www.utilities-online.info/xmltojson/ adresinde yapıldığı için numaranın neden değiştirildiğini anlamlandırır.

(Not: Windows 7 Professional kullanarak Google Chrome sürümü 26.0.1410.43 m üzerinde test)

Düzenleme:

Eğer dizeleri olarak Javascript bu değerleri geçemez herhangi bir neden var mı?

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

bunu başardı ve başarılı değerleri kaydetmek:

bu deneyin. Ancak, elbette 0 ile çarpma gibi bir şey yapmıyorsanız, Javascript'te bir miktar hassaslık kaybetmeden bir matematik hesaplaması yapamazsınız.

Javascript precision string workaround

Bu aynı zamanda doğru referansı http://www.utilities-online.info/xmltojson/ kullanarak XML dönüştürülür.

+0

IE 9 ve Chrome üzerinde denemiştim. Temel olarak, Spring MVC denetleyicimden bir JSON yanıtı almaya çalışıyorum ve geçersiz değerler alıyorum. XML dönüştürücüyü sadece istek/yanıt göstermek için kullandım. Teşekkürler! Gson ve Jackson'ı denedim. – Jeet

+0

@Jeet - Bkz. ** Düzenleme **. Amaçlarınız için çalışabilecek bir geçici çözüm buldum. – Aiias

+0

Eh .. Onları dizeler olarak geçirebilirim, ancak bu manuel müdahale olmaz mı? Kutunun dışında bir çözüm olmasını umuyordum. – Jeet

2

Javascript, sayılarını + -9007199254740992 olarak gösterilebilen en büyük tamsayı sayısını sınırlayan çift duyarlıklı şamandıra olarak gösterir. İşte ECMA belgeleri.

İlgili konular