2014-02-23 6 views
5

Ich habe gerade codiert, um ein Array von doppelten Werten in die JsonObject zu setzen. Aber alle meine doppelten Werte werden in int-Werte umgewandelt, wenn ich sie drucke. Kann mir jemand helfen zu verstehen, was dahinter passiert? Bitte lassen Sie mich die beste Art und Weise kennen primitive Arrays setzen in JsonObjectWarum double in int in JSON umgewandelt wird

public class JsonPrimitiveArrays {   
    public static void main(String[] args) { 
     JSONObject jsonObject = new JSONObject(); 
     double[] d = new double[]{1.0,2.0,3.0}; 
     jsonObject.put("doubles",d); 
     System.out.println(jsonObject);    
    }   
} 

Ausgang:

{ "Doppel": [1,2,3]}

+0

Ist es Lokalisierungsprobleme? – ChiefTwoPencils

+0

Es tut mir leid. Was meinst du mit Lokalisierungsproblemen? – Keerthivasan

Antwort

5

Es ist in Wirklichkeit nicht in int umgewandelt. Es passiert nur, dass das JS-Objekt .0 nicht anzeigt, was nicht relevant ist.

In Ihrem Beispielprogramm

double[] d = new double[]{1.0,2.1,3.1} einige des Wertes von double[] d = new double[]{1.0,2.0,3.0} ändern und das Programm auszuführen.

Sie beobachten es in real nicht in int konvertieren. Die Ausgabe erhalten Sie liegt {"doubles":[1,2.1,3.1]}

7

Alle Zahlen sind schwebt in Javascript. Also, 1.0 und 1 sind in JS gleich. Es gibt keine Unterscheidung von int, float und double.

Da JSON als JS-Objekt enden wird, ist es nicht sinnvoll, ein zusätzliches '.0' hinzuzufügen, da '1' ebenfalls ein Gleitkomma darstellt. Ich denke, das ist getan, um ein paar Bytes in der Zeichenfolge zu speichern, die herumgereicht wird.

So erhalten Sie eine Float in JS, und wenn Sie es zurück zu Java analysieren, sollten Sie eine doppelte erhalten. Versuch es.

In der Zwischenzeit, wenn Sie daran interessiert sind, wie es auf dem Bildschirm angezeigt wird, können Sie einige Zeichenfolge Formatierung versuchen, es wie "1.0" aussehen.

+1

+1, ich habe gelernt, dass alle Zahlen in Javascript Floats sind und die Nullen entfernt werden, um ein paar Bytes zu speichern, danke :) – Keerthivasan

+0

Nicht sicher, ob die Antwort korrekt ist, da die Frage über Java, nicht JavaScript. –

+0

@JasonCapriotti In der Frage, wenn ein Java-Double-Array in JSON konvertiert wird, sieht es aus wie ein Integer-Array in der JSON-Zeichenfolge. Ich erklärte, dass es in Javascript keinen Unterschied zwischen float/double/int gibt. Also ist das ".0" unnötig. Die JSON-Bibliothek in Java fügt also keine ".0" hinzu. Ich hoffe, Sie verstehen, dass ** JS ** ON ist ** Javascript ** Object Notation. – Teddy

6

bei toString of net.sf.json.JSONObject Suchen sie schließlich rufen die folgende Methode, die Zahlen zu String (source code here) zu übersetzen:

public static String numberToString(Number n) { 
     if (n == null) { 
      throw new JSONException("Null pointer"); 
     } 
     //testValidity(n); 

     // Shave off trailing zeros and decimal point, if possible. 

     String s = n.toString(); 
     if (s.indexOf('.') > 0 && s.indexOf('e') < 0 && s.indexOf('E') < 0) { 
      while (s.endsWith("0")) { 
       s = s.substring(0, s.length() - 1); 
      } 
      if (s.endsWith(".")) { 
       s = s.substring(0, s.length() - 1); 
      } 
     } 
     return s; 
    } 

Es wird versucht eindeutig die nachfolgenden Nullen loszuwerden, wenn es kann , (s = s.substring(0, s.length() - 1), wenn ein String auf Null endet).

System.out.println(numberToString(1.1) + " vs " + numberToString(1.0)); 

gibt,

1.1 vs 1 
+0

+1 Danke für den Code, hat mir sehr geholfen! – Keerthivasan

Verwandte Themen