我需要在我的JSON文件中指定具有浮动值的变量。但似乎并没有识别浮动值(例如 20.4444f,0.5f 等)。所以我想知道为什么可以替换它以便在JSON中将浮点值赋给变量?
另外,我将使用JSON文件在java中设置大量的数字参数(类型为string,float,double)。
当需要处理更多数字数据时,使用哪种java JSON API?非常感谢您的投入。
据我所知,Json Java API不支持从json文件中读取浮点值。是对的吗 ?
我可以想到一个粗略的解决方案,即将值指定为double,将其读取为Double,然后在实际使用之前将其转换为float。但是我担心将double转换为float可能无法给出我在json文件中指定的确切值(如果可能,则为float)。请您的意见!
答案 0 :(得分:1)
但是我担心将double转换为float可能无法给出我在json文件中指定的确切值(如果可能,则为float)。请你的意见!
这很好:float
- > double
- >通过Java使用的IEEE754格式保证float
往返转换是准确的(唯一的例外是NaN值,这可能不会保留有效载荷位模式,但这些因素不会成为问题,因为它们是'反正JSON不支持。)
答案 1 :(得分:0)
检查java脚本中的数据类型:
https://www.tutorialspoint.com/json/json_data_types.htm
无论是int,float还是double,所有这些都属于 Number 的相同类别。 例如,如果要将双精度数组转换为json字符串:
/
它只是输出为:
{ “双打”:[1,2,3]}
所有数字都是Javascript中的浮点数。所以,JS和1.0中的1.0和1相同。没有int,float和double的区别。
由于JSON最终将作为JS对象,因此添加额外的'.0'是没有用的,因为'1'也代表浮点数。我想这样做是为了在传递的字符串中保存几个字节。
所以,你将在JS中获得一个浮点数,如果你将它解析回Java,你应该得到一个双精度数。试试吧。
再添一个例子:
1.写一个DTO课程:
public class JsonPrimitiveArrays {
public static void main(String[] args) {
JSONObject jsonObject = new JSONObject();
double[] d = new double[]{1.0,2.0,3.0};
jsonObject.put("doubles",d);
System.out.println(jsonObject);
}
}
2.然后编写一个父bean,它将包含上面的DTO引用:
package com.multithreading.concurrency;
public class Identidade {
private int numero;
private int numeroFinal;
private float id;
public Identidade(int numero, int numeroFinal, float id) {
this.numero = numero;
this.numeroFinal = numeroFinal;
this.id = id;
}
// getters and setters
}
现在,通过以下代码测试它:
public class ParentIdentidade {
@JsonProperty("Identidade")
private List<Identidade> identidade;
// getters and setters
}
您可以将输出视为:
{ “Identidade”:[{ “NUMERO”:1704, “numeroFinal”:1804, “ID”:28.0},{ “NUMERO”:1806, “numeroFinal”:1905, “ID”:28.3},{ “NUMERO”:1705, “numeroFinal”:1706, “ID”:29.0},{ “NUMERO”:1707, “numeroFinal”:1807, “ID”:30.38}]}