2015-09-01 32 views
0

我碰到的时候,我有以下的JSONObject(org.json)问题:转换的JSONObject到字符串,其中价值为0.0

{ 
"float1": 0.0, 
"float2": 0.1 
} 

当我在对象上调用toString方法我得到的字符串:

{"float1": 0,"float2": 0.1} 

因此0.0被转换为0,这对我造成很多问题。有人知道如何解决这个问题吗?

+2

它不应该引起你的问题。数字0和0.0是相同的。问题是什么?什么是相关代码? –

+0

让我们想象两个jsons,一个是我们说的模式,另一个是一些处理的结果。我的测试工具(JSON比较器)需要两个不同的“0.0”.equals(“0”)的JSON字符串是假的 – user3450486

+1

自然的后续将是为什么你比较字符串,而不是比较值? –

回答

0

我想这就是你想要的。然而,这个解决方案将迫使你使用自己的扩展自JSONObject的类,它的唯一功能是覆盖JSONObject的toString()方法,我不知道它是否值得。

import org.json.JSONObject; 
import org.json.JSONException; 

public class Test extends JSONObject { 
    public Test(String in) throws JSONException { 
     super(in); 
    } 

    public static Test jsonObj = null; 

    public static void main(String[] args) throws JSONException { 
     jsonObj = new Test("{float1: 0.0, float2: 0.1}"); 
     System.out.println(jsonObj.toString()); 
    } 

    @Override 
    public String toString() { 
     StringBuilder sb = new StringBuilder(); 
     sb.append("{"); 
     String[] box = JSONObject.getNames(jsonObj); 
     for (int i = 0; i < JSONObject.getNames(jsonObj).length; i++) { 
      try { 
       sb.append(box[i]) 
         .append(" ") 
         .append(String.format(Locale.ENGLISH, "%.1f", 
           jsonObj.get(box[i]))) 
         .append(i != JSONObject.getNames(jsonObj).length - 1 ? "," 
           : ""); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
     sb.append("}"); 
     return sb.toString(); 

    } 

} 
0

我会试试Gson来实现这个。

Gson gson = new GsonBuilder().registerTypeAdapter(Double.class, new DoubleSerializer()).create(); 
TestBean bean = gson.fromJson(jsonInput, TestBean.class); 
String jsonOutput = gson.toJson(bean); 

DoubleSerializer:

class DoubleSerializer implements JsonSerializer<Double> { 
    public JsonElement serialize(Double src, Type typeOfSrc, JsonSerializationContext context) { 
     return new JsonPrimitive(String.format("%.1f", src)); 
     } 
} 

TestBean.java:

public class TestBean { 
    private Double float1; 
    private Double float2; 

    public Double getFloat1() { 
     return float1; 
    } 
    public void setFloat1(Double float1) { 
     this.float1 = float1; 
    } 
    public Double getFloat2() { 
     return float2; 
    } 
    public void setFloat2(Double float2) { 
     this.float2 = float2; 
    } 
} 

如果jsonInput是

{ 
"float1": 0.0, 
"float2": 1.31 
} 

的jsonOutput将是:

{ 
    "float1": "0.0", 
    "float2": "1.3" 
} 
相关问题