我试图从JSONObject获取值。这是JSONObject中的值。
{name: "alice", amount: 2.3}
// name (string), amount (decimal)
我对如何从JSONObject获取十进制值感到困惑。这是我的代码。我的代码是否正确?我认为浮点数和小数是不同的。我试图找到它,但我没有找到它。
JSONObject data = new JSONObject();
float myFloatValue = BigDecimal.valueOf(data.getDouble("amount")).floatValue();
...
答案 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构造函数中?