我很困惑可能是什么问题。我正在使用 GSON (2.2.4) 序列化/反序列化简单的 json 对象和数组,它们显示在 JTable 中。一切正常,但是当我提供这样的 json 对象时:
{"1":{"336":"#1700EB","17":"#EB0000","10":"#EB0000","26":"#1700EB","3":"#1700EB" ,"1":"#EB0000"}}
它抛出这个错误:
com.google.gson.JsonSyntaxException: java.io.EOFException: End of input at line 1 column 71
at com.google.gson.Gson.fromJson(Gson.java:813)
at com.google.gson.Gson.fromJson(Gson.java:768)
at com.google.gson.Gson.fromJson(Gson.java:717)
当我删除井号时,它可以正常工作。
这是进行转换的代码:
Map<String, String> conv = null;
Type type = new TypeToken<Map<String, String>>(){}.getType();
ListMultimap<String, Object> returnMap = ArrayListMultimap.create();
try {
conv = g.fromJson(parse, type);
for(String key : conv.keySet()) {
returnMap.put("Key", key);
returnMap.put("Value", conv.get(key));
}
} catch (JsonSyntaxException jse) {
type = new TypeToken<Map<String, Object>>(){}.getType();
conv = g.fromJson(parse, type);
for(Object key : conv.keySet()) {
returnMap.put("Key", key);
returnMap.put("Value", conv.get(key));
}
}
请注意,我正在开发一个“遗留”应用程序,我几乎无法控制我正在处理的代码部分的值;这就是为什么我有那个奇怪的 try-catch 块。
此应用程序的大多数用户不够精明,无法将其字符串/json 用于避免像此处概述的那样触发异常的明确目的(例如,在通过应用程序时不包括 # 符号;但在需要时将其添加回来),所以我真的很想在代码中修复它。
谢谢!
编辑:我忘了添加一个重要的细节。我对代码所做的是以表格形式显示数据。当用户选择一个单元格时,它会根据上下文进行处理。在包含 json 对象或数组的单元格上下文中,它使用上面的代码从 json 中提取值并将其作为表模型的新表数据传递。因此,示例 json 对象理想情况下应该像这样出来(想象一下表格形式)
336 | #1700EB 17 | #EB0000 10 | #EB0000 26 | #1700EB 3 | #1700EB 1 | #EB0000
...但它没有到达那里。上一个包含 json 对象的单元格的表如下所示:
1 | {336=#1700EB, 17=#EB0000, 10=#EB0000, 26=#1700EB, 1=#EB0000}
这个表格与错误有什么关系吗?我知道 json 对象形式应该是这样的(至少是我使用的那些):{"336":"#1700EB"...}。这可能是我对可能出了什么问题的唯一预感。