对于 Gson 转换数值long 类型有一定的缺陷,总是转换成科学计数法的形式
如下json
{"username":"tomcat","uuid":123456789012}
转成的结果
{username=tomcat, uuid=1.23456789012E11}
很明显,不符合我们的要求,
因此需要改变
所需的依赖
net.sf.json-lib
json-lib
2.4
jdk15
com.google.code.gson
gson
2.8.5
测试代码
package sun.rain.amazing.gson.quest;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.LongSerializationPolicy;
import com.google.gson.reflect.TypeToken;
import net.sf.json.JSONObject;
import org.junit.Test;
import java.util.Map;
/**
* @author sunRainAmazing
*/
public class LongValueTest {
/**
* GSON处理JSON数据中Long型的数据变成 科学计数法的问题解决方案
*
* 1、先转成 JSONObject
* 2、GsonBuilder 设置 Long数值型的转换策略为STRING策略
* 3、gson.toJson(JSONObject)
* 4、再转换成Map
*
* 结果
* {username=tomcat, uuid=1.23456789012E11}
* {username=tomcat, uuid=1.23456789012E11,
* mapObj={tname=jerry, tid=1.11523065825E11}, arg=abc}
*
* {"username":"tomcat","uuid":"123456789012",
* "mapObj":{"tname":"jerry","tid":"111523065825"},"arg":"abc"}
*
* {username=tomcat, uuid=123456789012,
* mapObj={tname=jerry, tid=111523065825}, arg=abc}
*/
@Test
public void testLongValue(){
Gson gson = new Gson();
String json = "{\"username\":\"tomcat\",\"uuid\":123456789012}";
Map res = gson.fromJson(json,
new TypeToken