2017-09-19 4 views
0

Je dois lire un entier et double comme dans la propriété String mais GSON traite chaque int comme double (oui, je comprends qu'il s'agit de la norme JSON).GSON traite l'entier comme un double

Ainsi, par exemple, j'ai classe:

public class MyObject { 
    String value; 
} 

Dans certains cas, j'ai ce JSON - {"value": 1} et parfois - {"value": 2.4}.

Et je dois afficher ces valeurs telles quelles, mais la première valeur sera lue comme 1.0.

J'ai essayé d'utiliser JsonDeserializer et TypeAdapter, tous deux ont une méthode comme getAsString et tous les deux convertissent d'abord la valeur en double, puis la retournent.

Comment la méthode ressemble à JsonPrimitive:

@Override 
public String getAsString() { 
    if (isNumber()) { 
     return getAsNumber().toString(); 
    } else if (isBoolean()) { 
     return getAsBooleanWrapper().toString(); 
    } else { 
     return (String) value; 
    } 
} 

Vous pouvez voir ici isNumber vérifier.

Alors est-il possible de résoudre ce problème en quelque sorte?

Répondre

0
public class youClass(){ 
    private int i; 
} 

puis:

Gson gson = new Gson(); 
yourClass = gson.fromJson(jsonText , yourClass); 
yourClass.getI(); 

espoir d'être utile

0

Ce que vous pouvez faire est que vous pouvez obtenir la valeur chaîne de votre JSON

Et créer vérifiez pour connaître la valeur est double ou juste un nombre entier, en utilisant ci-dessous une manière délicate.

essai ci-dessous code:

String stringArr[] = {"1", "1.0", "1.2", "3.5", "2.5"}; 
     for(int i=0;i<stringArr.length;i++){ 
       if(stringArr[i].equals(String.valueOf(Double.parseDouble(stringArr[i])))){ 
        System.out.println("It's a double value : "+stringArr[i]); 
       }else{ 
        System.out.println("It's a inte value : "+stringArr[i]); 
       } 
     } 

sortie:

Il est une valeur inte: 1

Il est une double valeur: 1,0

Il est une valeur double: 1,2

Il est une double valeur: 3,5

Il est une double valeur: 2,5

+0

Je dois montrer zéros si elle vient de côté serveur. S'il vient sans zéros, je dois afficher sans zéros. C'est pourquoi j'ai dit que je voulais laisser des valeurs car elles venaient du serveur. – dewarder

+0

@Google j'ai mal compris le problème, je viens de mettre à jour ci-dessus un –

+0

Mais le problème ici que je ne peux pas obtenir "1", pas "1.0" en utilisant Gson. Gson convertit automatiquement "1" en "1.0" – dewarder