Kan*_*ani 12 java json javabeans gson
嗨,我可以配置gson,他使用int而不是double获取数据,如:
{fn: chat, data: {roomId: 1, text: "Some brabble"}}
Run Code Online (Sandbox Code Playgroud)
我有一个PacketClass将其反序列化为:
public class DataPacket {
private String fn;
private Object p; // will be a StringMap
}
Run Code Online (Sandbox Code Playgroud)
并解码如下:
DataPacket pkg = gson.fromJson(message, DataPacket.class);
Run Code Online (Sandbox Code Playgroud)
为了更好的类型处理,我得到了DataPacket.p字段的数据pojo,例如:
public class ChatPacket {
public int roomId;
public String message;
public String from;
// getter & setter
}
Run Code Online (Sandbox Code Playgroud)
将数据解析为数据包我使用BeanMaps(我删除了错误处理等):
public Object getData(Class<?> pojoClass) {
pojo = pojoClass.newInstance();
BeanMap b = new BeanMap();
b.setBean(pojo);
b.putAll(this.p);
pojo = b.getBean();
}
Run Code Online (Sandbox Code Playgroud)
问题是现在gson使roomId:1变为StringMap中的双1.0并且beanmap尝试将其解析为整数并抛出NumberFormatException,任何人都知道如何解决这个问题?
谢谢!
我认为你可以简单地将 DataPacket 类更改为
public class DataPacket {
private String fn;
private ChatPacket p; // will be a StringMap
}
Run Code Online (Sandbox Code Playgroud)
(将 Object 替换为 ChatPacket)- 如果这适合您的应用程序的其余部分。然后,Gson 将识别 ChatPacket 类的数据类型,并将“1”特征化为 int。
编辑(因为您不能在评论中使用完整的格式化功能:-( )
您可以使用 Gson 及其低级助手 JsonParser 的组合,如下所示:
String testStr = "{fn: chat, data: {roomId: 1, message: \"Some brabble\"}}";
DataPacket dp = new Gson().fromJson(testStr, DataPacket.class);
JsonParser parser = new JsonParser();
JsonElement e = parser.parse(testStr);
ChatPacket cp = new Gson().fromJson(e.getAsJsonObject().getAsJsonObject("data"), ChatPacket.class);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9134 次 |
最近记录: |