如何从json对象获取十进制格式值

时间:2018-03-02 12:26:15

标签: java android

我试图从JSONObject获取值。这是JSONObject中的值。

{name: "alice", amount: 2.3}
// name (string), amount (decimal)

我对如何从JSONObject获取十进制值感到困惑。这是我的代码。我的代码是否正确?我认为浮点数和小数是不同的。我试图找到它,但我没有找到它。

JSONObject data = new JSONObject();
float myFloatValue = BigDecimal.valueOf(data.getDouble("amount")).floatValue();

...

3 个答案:

答案 0 :(得分:2)

在Java中,当您键入十进制数为3.6时,其解释为double。由于float不如double精确,因此无法隐式执行转换。

如果你想创建一个浮点数,你应该用f(即:3.6f)结束你的数字。

JSONObject data = new JSONObject(//your jsonObject);
float myFloatValue=(float)data.getDouble("amount");

这很好用

使用setter和getter创建POJO类(MyData)。这是更好的方式

public class MyData{
private String name;
private Double amount;
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public Double getAmount() {
    return amount;
}
public void setAmount(Double amount) {
    this.amount = amount;
}
}

在你的方法中写下这个块:

ObjectMapper mapper = new ObjectMapper();
JSONObject data = new JSONObject(//your jsonObject);
MyData myData = mapper.readValue(data.toString(),MyData.class);
float myFloatValue=(float)myData.getAmount();

现在你可以在myFloatValue中拥有浮点值。

答案 1 :(得分:0)

如果您的金额是字符串(我最好猜测它在字符串中,否则您不会尝试将其转换为double)尝试将其设置为double .. as

  double amt = Double.parseDouble(data.getString("amount"));

答案 2 :(得分:0)

以下代码非常适合我:

String data = "{name: \"alice\", amount: 2.3}"; 
org.json.JSONObject object = new org.json.JSONObject(data);
System.out.println(object.getDouble("amount"));

输出:

run:
2.3
BUILD SUCCESSFUL (total time: 0 seconds)

您是否忘记将JSON数据字符串放入JSONObject构造函数中?