所以我正在使用 GSON 解析一个非常大的 JSON 文件。 我将其解析成的类结构如下:
我想做的是将 double (在 HashSet 中,在 Geometry 类中)四舍五入到小数点后 4 位。因此,随着将 double 添加到 HashSet,我想将它们四舍五入。
public class Contours {
public String name = null;
public String type = null;
ArrayList<Features> features = null;
class Features {
public String type = null;
public Geometry geometry = null;
public Properties properties = null;
}
class Geometry {
public String type = null;
HashSet<double[]> coordinates = null;
}
class Properties {
public String CONTOUR = null;
public int OBJECTID;
public String LAYER = null;
public double ELEVATION;
}
}
为什么我不能在 GSON 解析文件后迭代执行此操作?
该文件非常大,有 412,064 行,大小为 27.5mb。所以这样做会花费很长时间。
注意:每次运行此应用程序时都会进行此解析,因此速度是必要的。
谢谢
最佳答案
您可以注册一个 TypeAdapter
来修改读取的值:
public class GsonDoubleAdapterTest {
public static void main(String[] args) {
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Double.class, new DoubleAdapter());
Gson gson = builder.create();
Foo foo = gson.fromJson("{\"baz\": 0.123456}", Foo.class);
System.out.println(foo);
}
}
/**
* A type adapter that rounds doubles during read.
*/
class DoubleAdapter extends TypeAdapter<Double> {
@Override
public void write(JsonWriter out, Double value) throws IOException {
out.value(value);
}
@Override
public Double read(JsonReader in) throws IOException {
return new BigDecimal(in.nextDouble()).setScale(4, RoundingMode.HALF_UP).doubleValue();
}
}
class Foo {
private Double baz;
public Double getBaz() {
return baz;
}
public void setBaz(Double baz) {
this.baz = baz;
}
@Override
public String toString() {
return "Foo[baz=" + baz + ']';
}
}
关于java - 在 HashSet 中添加时 GSON 双舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49441566/