在jsp上显示未知json文件的内容

时间:2018-02-05 17:53:25

标签: java json jsp servlets

我遇到了这个要求,我需要从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,但该元素可能有任意数量的映射。

任何指针?

1 个答案:

答案 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>