我碰到的时候,我有以下的JSONObject(org.json)问题:转换的JSONObject到字符串,其中价值为0.0
{
"float1": 0.0,
"float2": 0.1
}
当我在对象上调用toString方法我得到的字符串:
{"float1": 0,"float2": 0.1}
因此0.0被转换为0,这对我造成很多问题。有人知道如何解决这个问题吗?
我碰到的时候,我有以下的JSONObject(org.json)问题:转换的JSONObject到字符串,其中价值为0.0
{
"float1": 0.0,
"float2": 0.1
}
当我在对象上调用toString方法我得到的字符串:
{"float1": 0,"float2": 0.1}
因此0.0被转换为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();
}
}
我会试试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"
}
它不应该引起你的问题。数字0和0.0是相同的。问题是什么?什么是相关代码? –
让我们想象两个jsons,一个是我们说的模式,另一个是一些处理的结果。我的测试工具(JSON比较器)需要两个不同的“0.0”.equals(“0”)的JSON字符串是假的 – user3450486
自然的后续将是为什么你比较字符串,而不是比较值? –