我遇到了这个要求,我需要从json文件中获取响应并在我的jsp文件中以表格格式显示它。这里的问题是json文件可以有任何结构。我将在输入中收到的json文件的字段不固定。我不知道如何编码。
这是我到目前为止所尝试的内容。这给了我javax.el.PropertyNotFoundException: Property 'notes' not found on type java.util.HashMap$Node
,这很明显。对于这种类型的json,我有属性[音符,温度,压力和_time]。但对于任何其他json,这可以再次改变。
jsp代码:
<body>
<h1>${text}</h1>
<h2>This is another text</h2>
<c:forEach items="${text}" var="pp">
<tr>
<td><c:out value="${pp.notes}" /></td>
<td><c:out value="${pp.temperature}" /></td>
<td><c:out value="${pp.pressure}" /></td>
<td><c:out value="${pp._time}" /></td>
</tr>
</c:forEach>
</body>
Servlet代码:
try {
Object obj = new JSONParser().parse(new FileReader("C:\\Dev\\JSONExample.json"));
JSONObject jo = (JSONObject) obj;
Iterator itr2 = ja.iterator();
Map<String,String> jMap = new HashMap<String,String>();
while (itr2.hasNext())
{
Iterator<Map.Entry> itr1 = ((Map) itr2.next()).entrySet().iterator();
while (itr1.hasNext()) {
Map.Entry pair = itr1.next();
String k = pair.getKey().toString();
String v = pair.getValue().toString();
// System.out.println(pair.getKey() + " : " + pair.getValue());
jMap.put(k, v);
}
}
Object text = jMap;
request.setAttribute("text", text);
request.getRequestDispatcher("index.jsp").forward(request, response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我可以通过我在servlet中设置的text
属性看到我的地图内容。但是无法将其拆分为单个属性。 <h1>${text}</h1>
工作正常。
编辑:众所周知,json的类型为[{a:s,j:k,l:p ...}]。意思是,将有一个只有一个元素的JSONArray,但该元素可能有任意数量的映射。
任何指针?
答案 0 :(得分:0)
将jsp部分更改为以下解决了我的问题:
<c:forEach items="${text}" var="item">
<tr>
<td><c:out value="${item.getKey()}" /></td>
<td><c:out value="${item.getValue()}" /></td>
</tr>
</c:forEach>