如何防止 Gson 将一个长数字(一个 json 字符串)转换为科学计数格式?

新手上路,请多包涵

我需要将 json 字符串转换为 java 对象并将其显示为 long。 json 字符串是一个固定的长数组:

 {numbers
[ 268627104, 485677888, 506884800 ] }

要转换的代码在所有情况下都可以正常工作,但以 0 结尾的数字除外。它将这些转换为科学记数法数字格式:

    public static Object fromJson(HttpResponse response, Class<?> classOf)
    throws IOException {
    InputStream instream = response.getResponseInputStream();

    Object obj = null;
    try {
        Reader reader = new InputStreamReader(instream, HTTP.UTF_8);

        Gson gson = new Gson();

        obj = gson.fromJson(reader, classOf);

        Logger.d(TAG, "json --> "+gson.toJson(obj));
    } catch (UnsupportedEncodingException e) {
        Logger.e(TAG, "unsupported encoding", e);
    } catch (Exception e) {
        Logger.e(TAG, "json parsing error", e);
    }

    return obj;
}

实际结果:Java对象:268627104、485677888、5.068848E+8

请注意,最后一个数字已转换为科学记数法格式。任何人都可以建议可以做些什么来解决它或阻止它或撤消它吗?我正在使用 Gson v1.7.1

原文由 lini sax 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
1 个回答

如果序列化为 String 是您的一个选项,您可以配置 GSON 这样做:

 GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setLongSerializationPolicy( LongSerializationPolicy.STRING );
Gson gson = gsonBuilder.create();

这将产生如下内容:

 {numbers : [ "268627104", "485677888", "506884800" ] }

原文由 Adam 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题