使用com.google.gson.Gson进行实体类与JSON转换时遇到的坑
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
一.、
com.google.gson.stream.MalformedJsonException
可能原因:
1.JSON中存在空格
eg:{"data_type" : "SQL Server"}
2.JSON中存在空字符串
eg:{ "data_type" : "" }
解决方式:
使用toJson将gson转为json
eg:
private Gson gson = new Gson();
String fieldstr = gson.toJson(obj); // 将gson转化为json
Systableparam systable = gson.fromJson(fieldstr , Systableparam.class);
二、
java.lang.NumberFormatException: empty String 转换异常
可能原因:
如图,field_id在实体中定义为Integer,接收的却是空字符串
解决方式
创建NullStringToEmptyAdapterFactory自定义处理类
创建StringAdapter继承TypeAdapter,重写方法
public class StringAdapter extends TypeAdapter<String> {
@Override
public String read(JsonReader arg0) throws IOException {
// TODO Auto-generated method stub
// if (arg0.peek() == JsonToken.NULL || "".equals(arg0.peek())) {
if (arg0.peek() == JsonToken.NULL) {
arg0.nextNull();
return "";
}
return arg0.nextString();
}
@Override
public void write(JsonWriter arg0, String arg1) throws IOException {
// TODO Auto-generated method stub
if (arg1 == null || "".equals(arg1)) {
arg0.nullValue();
return;
}
arg0.value(arg1);
}
}
创建NullStringToEmptyAdapterFactory实现TypeAdapterFactory接口
public class NullStringToEmptyAdapterFactory implements TypeAdapterFactory {
@Override
public <T> TypeAdapter<T> create(Gson arg0, TypeToken<T> arg1) {
// TODO Auto-generated method stub
Class<T> rawType = (Class<T>) arg1.getRawType();
if (rawType != String.class) {
return null;
}
return (TypeAdapter<T>) new StringAdapter();
}
}
使用:
eg:
private Gson gson =
new GsonBuilder().serializeNulls().registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory()).create();
String sysstr = gson.toJson(obj);
Systableparam systable = gson.fromJson(sysstr, Systableparam.class);
【其他】
转为自定义的List<Object>
eg:
List<Systableparam> fiellist =
gson.fromJson(sysstr, new TypeToken<List<Systableparam>>() {}.getType());
当map中值为null时保留该键值对
//将 new Gson() 改为 new GsonBuilder().serializeNulls().create()
Gson gson = new GsonBuilder().serializeNulls().create();
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e
4 个月前
8c391e04
6 个月前
更多推荐
已为社区贡献1条内容
所有评论(0)