當我們使用el表達式從json字符串中取得數據時,常常會遇到一些錯誤。接下來我們就來看看一些常見的錯誤以及如何解決它們。
1. 錯誤提示“Cannot convert undefined or null to object”
<c:forEach items="${jsonObject.items}" var="item"> <span>${item.name}</span> </c:forEach>
出現這個錯誤的原因是因為jsonObject對象中沒有items屬性。我們可以通過判斷jsonObject是否為空來解決這個問題。
<c:if test="${not empty jsonObject}"> <c:forEach items="${jsonObject.items}" var="item"> <span>${item.name}</span> </c:forEach> </c:if>
2. 錯誤提示“Unexpected character (''' (code 39))”
<c:set var="jsonStr" value="{'name': 'Jack', 'age': 25}" /> <c:set var="jsonObject" value="${fn:replace(jsonStr, '''', '\'')}" />
出現這個錯誤的原因是在json字符串中使用了單引號。解決方法是將json字符串中的單引號轉義成反斜杠加單引號。
<c:set var="jsonStr" value="{'name': 'Jack', 'age': 25}" /> <c:set var="jsonObject" value="${fn:replace(jsonStr, ''', '\\'')}" />
3. 錯誤提示“javax.el.PropertyNotFoundException: Property 'xxx' not found on type java.lang.String”
<c:set var="jsonStr" value="{'name': 'Jack', 'age': 25}" /> <c:set var="jsonObject" value="${fn:replace(jsonStr, ''', '\\'')}" /> ${jsonObject.name}
出現這個錯誤的原因是因為從json字符串中取得的數據類型為String,而不是jsonObject類型。我們需要先將json字符串轉換成jsonObject類型。
<c:set var="jsonStr" value="{'name': 'Jack', 'age': 25}" /> <c:set var="jsonObject" value="${fn:replace(jsonStr, ''', '\\'')}" /> <c:set var="jsonObject" value="${#servletContext.getAttribute('org.apache.struts2.json.JSONUtil.out').deserialize(jsonObject)}" /> ${jsonObject.name}
通過以上幾個例子,我們可以發現,在使用el表達式取得json字符串的數據時,往往要考慮到一些特殊情況,才能順利地取得數據。
上一篇vue卡點在哪