2014-03-14 14 views
5

Wenn ich Object in Json umwandle, habe ich ein Problem mit BigDecimal Precision.
Lassen Sie sagen, ich Pojo Klasse haben mit,gson.toJson (Objekt) BigDecimal Precision Lost

public class DummyPojo { 
    private BigDecimal amount; 
    private String id; 
    public String getId() { 
     return id; 
    } 
    public void setId(String id) { 
     this.id = id; 
    } 
    public BigDecimal getAmount() { 
     return amount; 
    } 
    public void setAmount(BigDecimal amount) { 
     this.amount = amount; 
    } 
} 

Nun zu JSON Ich gründe dann Wert auf Pojo Umwandlung

public static void main(String[] args) { 
     BigDecimal big = new BigDecimal("1000.0005"); 
     JSONObject resultJson = new JSONObject(); 
     DummyPojo summary = new DummyPojo(); 
     summary.setId("A001"); 
     summary.setAmount(big); 

     resultJson.put("summary",new Gson().toJson(summary)); 
     String result = resultJson.toString(); 
     System.out.println(result); 
    } 

1. Test - korrekte Ausgabe

Output -> {"summary":{"amount":1000.0005,"id":"A001"}} 

2. Test - Falsche Ausgabe (Lost BigDecimal Precision)

BigDecimal big = new BigDecimal("1234567.5555"); //Changed the value 
Output -> {"summary":{"amount":1234567.5,"id":"A001"}} 

3. Test - Falscher Ausgang (Verlorene BigDecimal Precision)

BigDecimal big = new BigDecimal("100000.0005"); //Changed the value 
Output -> {"summary":{"amount":100000,"id":"A001"}} 

Erstaunlich, dass immer dann, wenn BigDecimal Wert höher Länge ist es dann auch Nachkommastelle gestutzt. Was ist das Problem mit JSON-Coverage. Würden Sie mir bitte die Lösung geben?

+0

Vermissen Sie JEE 7 'JSONObject' und' Gson'? –

+0

@fge Entschuldigung, ich habe einen solchen Ausgang ... –

Antwort

3

Ich denke, Sie mischen Java EE 7 JSONObject mit GSON JsonObject. Gson scheint nicht das Problem zu haben, das du erwähnt hast:

public static void main(String[] args) { 
    BigDecimal big = new BigDecimal("1234567.5555"); 
    DummyPojo summary = new DummyPojo(); 
    JsonObject resultJson = new JsonObject(); //this is Gson not Java EE 7 
    summary.setId("A001"); 
    summary.setAmount(big); 
    resultJson.addProperty("summary", new Gson().toJson(summary)); 
    System.out.println(resultJson.toString()); 
    //Outputs: {"summary":"{\"amount\":1234567.5555,\"id\":\"A001\"}"} 
} 
+0

Ja !!! JSONObject von net.sf.json.JSONObject; Bigdecimal Problem ... Aber wenn ich von org.json.simple.JSONObject verwendet, gibt es kein Problem. Warum ist das passiert? Ich verwende Gson's JSONOBject im ganzen Projekt –

+0

@SurendraJnawali Es muss die Implementierung von 'net.sf.json.JSONObject' sein, ich würde stattdessen nur Gson's' JsonObject' verwenden. –

+0

danke für deine lösung !!! –