java - 从 String 解析到 Map 时出现 JsonParseException

标签 java json jsp freemarker gson

我已经完成了这样的映射对象到字符串对象的转换

    public String getJsonString(Map<String, Map<String,List<CalculateContentCount>>> countMap) {
    Gson gson = new Gson();
    String jsonString = gson.toJson(countMap);
    return jsonString;
}

在ftl中,我已将返回的String对象设置为request并将其传递到JSP文件中

   <#assign countMap = json>
   <form action="/alfresco/jsp/kpub/reports/exportContentCountList.jsp" method="get">

<input type="hidden" name="countMap" id="countMap" value="${countMap}">
<input type="submit" value="ExportFiletoCSV"/>
   </form>

在exportContentCountList中,我尝试将字符串对象解析回Map对象,

String jsonString = request.getParameter("countMap");
System.out.println("jsonString : "+jsonString);
Gson gson = new Gson();
Map<String,Map<String,List<CalculateContentCount>>> countMap = null;
Type type = null;
if(jsonString != null && !"".equals(jsonString)) {
    type = new TypeToken<Map<String,Map<String,List<CalculateKpubContentCount>>>>(){}.getType();
    countMap = gson.fromJson(jsonString,type);
}

执行时出现以下异常。这是异常(exception)情况

com.google.gson.JsonParseException: Failed parsing JSON source:        
caused by:
com.google.gson.ParseException: Encountered "<EOF>" at line 1, column 1. 
Was expecting one of: 
<IDENTIFIER_SANS_EXPONENT> ... 
<IDENTIFIER_STARTS_WITH_EXPONENT> ... 
<SINGLE_QUOTE_LITERAL> ... 
<DOUBLE_QUOTE_LITERAL> ... 
"}" ... 

可能是什么问题?

最佳答案

检查生成的 HTML 输出。右键单击网络浏览器中的页面并选择查看源代码。看起来合适吗?还有双引号? Gson 输出带有双引号的 JSON 字符串。换句话说,生成的 HTML 在语法上是无效的。

使用 JSTL fn:escapeXml()转义 HTML 特殊字符,如 < , > , " , '这样它们就不会破坏 HTML 语法。

<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
<input type="hidden" name="countMap" id="countMap" value="${fn:escapeXml(countMap)}">

这样,整个字符串将被传回,而不是仅传回一部分,直到第一个引号(这导致 Gson 检测到 EOF(文件结束,或者更好地解释为字符串结束)。

<小时/>

更新:

如果不能使用 JSTL,则必须使用 String#replace()手动转义 HTML 实体。例如

return jsonString.replace("\"", "&quot;");

关于java - 从 String 解析到 Map 时出现 JsonParseException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4399984/

相关文章:

java - Java ArrayList 可以为空并且 indexOf 返回索引 0 吗?

javascript - AngularJS 中的 HTML 标记

java - 解析 JSON 对象文件并转换为 JSON 数组

java - linkedin 中 Http 请求中的授权 header

html - HTTP 状态 500 - 在第 6 行处理 JSP 页面/webtech/login.jsp 时发生异常

java - 使用 JAX-RS 而不特定于实现

java - 如何在 JSF 中从 Java 代码添加 JS 文件?

Java BlockingQueue 在 take() 上阻塞,略有不同

jquery - 在jquery中将多维哈希转换为数组

java - JSP页面在Servlet程序中不起作用