如何防止Gson将整数表示为浮点数

当我尝试将字符串转换为json时,Gson有一些奇怪的行为。下面的代码将字符串草稿转换为json响应。有没有一种方法可以防止gson将’.0加到所有整数值?

ArrayList<Hashtable<String, Object>> responses;

Type ResponseList = new TypeToken<ArrayList<Hashtable<String, Object>>>() {}.getType();

responses = new Gson().fromJson(draft, ResponseList);

draft:

[ {"id":4077395,"field_id":242566,"body":""},

{"id":4077398,"field_id":242569,"body":[[273019,0],[273020,1],[273021,0]]},

{"id":4077399,"field_id":242570,"body":[[273022,0],[273023,1],[273024,0]]}

]

responses:

[ {id=4077395.0, body=, field_id=242566.0},

{id=4077398.0, body=[[273019.0, 0.0], [273020.0, 1.0], [273021.0, 0.0]], field_id=242569.0},

{id=4077399.0, body=[[273022.0, 0.0], [273023.0, 1.0], [273024.0, 0.0]], field_id=242570.0}

]

回答:

您是在告诉Gson,它正在寻找字符串到对象的映射列表,这实际上是在对对象的类型做出最佳猜测。由于JSON不能区分整数和浮点字段,因此

Gson必须将数字字段默认设置为Float / Double。

Gson的基本目的是检查您要填充的对象的类型,以确定如何解析数据。如果您没有给出任何提示,它将无法很好地工作。一种选择是定义一个自定义的JsonDeserializer,但是更好的方法是不使用HashMap(并且绝对不要使用Hashtable!),而是为Gson提供有关其期望的数据类型的更多信息。

class Response {

int id;

int field_id;

ArrayList<ArrayList<Integer>> body; // or whatever type is most apropriate

}

responses = new Gson()

.fromJson(draft, new TypeToken<ArrayList<Response>>(){}.getType());

同样,Gson的重点是将结构化数据无缝转换为结构化对象。如果您要求它创建几乎未定义的结构(如对象映射列表),那么您将击败Gson的全部观点,并可能会使用一些更简单的JSON解析器。

以上是 如何防止Gson将整数表示为浮点数 的全部内容, 来源链接: utcz.com/qa/419219.html

回到顶部