将json字符串打印到html表格 [英] Print json string to html table

查看:85
本文介绍了将json字符串打印到html表格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  Gson gson =新的GsonBuilder()。setPrettyPrinting()。disableHtmlEscaping()。create(); 
String message = gson.toJson(output);
out.println(message);

,它看起来像这样:

  {status:error,已加载记录数:[{bid.csv:24},{course.csv:12},{course_completed。 csv:0},{prerequisites.csv:1},{section.csv:14},{student.csv:11}],errorList:[{file:student。 csv,line:9,message:[duplicate userid]},{file:student.csv,line:10,message:[invalid e-dollar] },{file:student.csv,line:11,message:[invalid e-dollar]},{file:course.csv,line message:[invalid exam start]},{file:course.csv,line:10,message:[invalid exam date]},{file:course .csv,line:11,message:[invalid exam date]},{file:section.csv,line:2,message:[invalid course, 复制部分]},{file:section.csv,line:4,message:[invalid section]},{file:section.csv :7,message:[invalid day]},{file:section.csv,li ne:8,message:[invalid start]},{file:section.csv,line:14,message:[invalid size]},{file :section.csv,line:15,message:[invalid size]},{file:section.csv,line:18,message:[invalid course ,复制部分]},{file:section.csv,line:19,message:[invalid course,duplicate section]},{file:section .csv,line:20,message:[invalid course,duplicate section]},{file:section.csv,line:21,message:[无效课程,重复部分]},{file:section.csv,line:22,message:[invalid course,duplicate section]},{file prerequisite.csv,line:2,message:[invalid course]},{file:prerequisite.csv,line:3,message:[invalid prerequisite ]},{file:course_completed.csv,line:2,message:[invalid userid]},{file:bid.csv,line:2, message:[invalid amount]},{file:bid.csv,line:3,message:[in有效部分]},{file:bid.csv,line:4,message:[invalid section]},{file:bid.csv,line: 5,message:[not own school course]},{file:bid.csv,line:6,message:[incomplete prerequisites]},{file bid.csv,line:13,message:[section limit reached]},{file:bid.csv,line:14,message:[e $]}]} 

我希望使用此代码传递此值:

  context.setAttribute(message,message); 
response.sendRedirect(zzz.jsp);

所以在zzz.jsp中,我想如何将上面复杂的json字符串打印到表格中?它应该显示如下内容:

  LinkedHashMap map = null; 
String status = null;
JSONArray jArr = null;
尝试{
map =(LinkedHashMap)context.getAttribute(bootstrapStatus);
status =(String)map.get(status);
out.println(< p>< font color ='red'> Bootstrap Status:+ status +< / font>< / p>);
jArr =(JSONArray)map.get(num-record-loaded);

} catch(NullPointerException npe){
status =Error:no bootstrap;
out.println(< p> + status +< / p>);
}

if(map!= null){
%>
< div class =CSSTableGenerator>
< table align ='center'>
< tr>
< td> CSV档案< / td>
< td>记录数量< / td>
< tr>< / tr>
<%
for(Object obj:jArr){
JSONObject jsonObj =(JSONObject)obj;
Set keys = jsonObj.keySet();
Iterator iter = keys.iterator(); (iter.hasNext()){
String fileName =(String)iter.next();

while(iter.hasNext())
int successLine =(Integer)jsonObj.get(fileName);
out.println(< tr>);
out.println(< td>+ fileName +< / td>);
out.println(< td>+ successLine +< / td>);
out.println(< / tr>);
}
}
%>
< / table>
< / div>
< br />
< p>< strong>错误讯息< / strong>< / p>

<%
if(status.equals(error)){
%>

< div class =CSSTableGenerator>
< table align ='center'>
< tr>
< td> CSV档案< / td>
< td>行号< / td>
< td>错误讯息< / td>
< tr>< / tr>
<%
ArrayList< BootstrapError> errArr =(ArrayList< BootstrapError>)map.get(error); (BootstrapError错误:errArr){
out.println(< tr>);


out.println(< td> + error.getFile()+< / td>);
out.println(< td> + error.getLine()+< / td>);
out.println(< td> + error.getMessage()+< / td>);
out.println(< / tr>);
}
}
}
%>
< / table>

我知道这里有一个错误: map =(LinkedHashMap )context.getAttribute(message); 所以我将它改为:

  String s = (String)context.getAttribute(message); 
LinkedHashMap map = new LinkedHashMap();
map.put(message,s);
String status =(String)map.get(status); <<<这显示为空
JSONArray jArr =(JSONArray)map.get(num-record-loaded); <<<这看起来是空的

任何帮助将不胜感激! (:

解决方案


  1. 我不明白装入JSON的原因,if所有你想要做的就是使用scriptlets并显示它,你可以简单地将输出对象本身通过上下文发送到重定向页面。


  2. 我想你还有别的想法,谈论这个问题,你可以这样做:




 
String temp = map =(LinkedHashMap)context.getAttribute(message);
JsonParser jp = new JsonParser();
JsonElement ele = jp.parse(temp);
JsonObject obj = ele.getAsJsonObject();
JsonArray jArr = Jsobj.get(装载的记录数)。getAsJsonArray();

 

更新



迭代JsonArray的方式不正确,以下是关于如何迭代JsonArray的示例:

  Iterator< JsonElement> msg = jsonArray .iterator(); 
while(msg.hasNext()){
////打印json数组值
JsonElement eleTemp = msg.next();
JsonObject jObj = eleTemp.getAsJsonObject();
// ...其他代码
}


I have a very complex JSON string, which is been created by GsonBuilder (in xxx.java)

Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
String message = gson.toJson(output);
out.println(message);

and it look like this:

{ "status": "error", "number of record loaded": [ { "bid.csv": 24 }, { "course.csv": 12 }, { "course_completed.csv": 0 }, { "prerequisites.csv": 1 }, { "section.csv": 14 }, { "student.csv": 11 } ], "errorList": [ { "file": "student.csv", "line": 9, "message": [ "duplicate userid" ] }, { "file": "student.csv", "line": 10, "message": [ "invalid e-dollar" ] }, { "file": "student.csv", "line": 11, "message": [ "invalid e-dollar" ] }, { "file": "course.csv", "line": 4, "message": [ "invalid exam start" ] }, { "file": "course.csv", "line": 10, "message": [ "invalid exam date" ] }, { "file": "course.csv", "line": 11, "message": [ "invalid exam date" ] }, { "file": "section.csv", "line": 2, "message": [ "invalid course", "duplicate section" ] }, { "file": "section.csv", "line": 4, "message": [ "invalid section" ] }, { "file": "section.csv", "line": 7, "message": [ "invalid day" ] }, { "file": "section.csv", "line": 8, "message": [ "invalid start" ] }, { "file": "section.csv", "line": 14, "message": [ "invalid size" ] }, { "file": "section.csv", "line": 15, "message": [ "invalid size" ] }, { "file": "section.csv", "line": 18, "message": [ "invalid course", "duplicate section" ] }, { "file": "section.csv", "line": 19, "message": [ "invalid course", "duplicate section" ] }, { "file": "section.csv", "line": 20, "message": [ "invalid course", "duplicate section" ] }, { "file": "section.csv", "line": 21, "message": [ "invalid course", "duplicate section" ] }, { "file": "section.csv", "line": 22, "message": [ "invalid course", "duplicate section" ] }, { "file": "prerequisite.csv", "line": 2, "message": [ "invalid course" ] }, { "file": "prerequisite.csv", "line": 3, "message": [ "invalid prerequisite" ] }, { "file": "course_completed.csv", "line": 2, "message": [ "invalid userid" ] }, { "file": "bid.csv", "line": 2, "message": [ "invalid amount" ] }, { "file": "bid.csv", "line": 3, "message": [ "invalid section" ] }, { "file": "bid.csv", "line": 4, "message": [ "invalid section" ] }, { "file": "bid.csv", "line": 5, "message": [ "not own school course" ] }, { "file": "bid.csv", "line": 6, "message": [ "incomplete prerequisites" ] }, { "file": "bid.csv", "line": 13, "message": [ "section limit reached" ] }, { "file": "bid.csv", "line": 14, "message": [ "insufficient e$" ] } ] }

I wish to pass this value using this code:

context.setAttribute("message", message);
response.sendRedirect("zzz.jsp");

So in zzz.jsp how am I suppose to print the above complex json string to table? It should display something like

LinkedHashMap map = null;
String status = null;
JSONArray jArr = null;
try {
    map = (LinkedHashMap) context.getAttribute("bootstrapStatus");     
    status = (String) map.get("status");
    out.println("<p><font color = 'red'> Bootstrap Status: " + status + "</font></p>");
    jArr = (JSONArray) map.get("num-record-loaded");

} catch (NullPointerException npe){
    status = "Error: no bootstrap";
    out.println("<p>"+status + "</p>");
}

if (map != null) {
%>
<div class="CSSTableGenerator" > 
    <table align='center'>
        <tr>
            <td>CSV File</td>
            <td>Number of records</td>
        <tr></tr>
        <%
            for (Object obj : jArr) {
                JSONObject jsonObj = (JSONObject) obj;
                Set keys = jsonObj.keySet();
                Iterator iter = keys.iterator();

                while (iter.hasNext()) {
                    String fileName = (String) iter.next();
                    int successLine = (Integer) jsonObj.get(fileName);
                    out.println("<tr>");
                    out.println("<td>" + fileName + "</td>");
                    out.println("<td>" + successLine + "</td>");
                    out.println("</tr>");
                }
            }
            %>
            </table>
        </div>
        <br/>
        <p><strong>Error Messages</strong></p>

        <%
            if (status.equals("error")) {
            %>

        <div class="CSSTableGenerator" > 
            <table align='center'>
                <tr>
                    <td>CSV File</td>
                    <td>Line number</td>
                    <td>Error message</td>
                <tr></tr>
                <%
                        ArrayList<BootstrapError> errArr = (ArrayList<BootstrapError>) map.get("error");

                        for (BootstrapError error : errArr) {
                            out.println("<tr>");
                            out.println("<td>" + error.getFile() + "</td>");
                            out.println("<td>" + error.getLine() + "</td>");
                            out.println("<td>" + error.getMessage() + "</td>");
                            out.println("</tr>");
                        }
                    }
            }
                %>
            </table>

and I know theres an error with regards with this: map = (LinkedHashMap) context.getAttribute("message"); so I changed it to:

String s = (String) context.getAttribute("message");
            LinkedHashMap map = new LinkedHashMap();
            map.put("message",s);
            String status = (String) map.get("status"); <<< this appear null
            JSONArray jArr = (JSONArray) map.get("num-record-loaded");  <<< this appears Null

Any help would be kindly appreciated! (:

解决方案

  1. I don't understand the reason of packing into JSON, if all you wanted to do is use scriptlets & display it. You could have simply sent the output object itself through context to the redirected page.

  2. I guess you have something else in mind. Talking about the question, here's how you can do it :

    String temp=map = (LinkedHashMap) context.getAttribute("message"); 
    JsonParser jp = new JsonParser();
    JsonElement ele = jp.parse(temp);
    JsonObject obj=ele.getAsJsonObject();
    JsonArray jArr =Jsobj.get("number of record loaded").getAsJsonArray();

Update

The way of iterating over the JsonArray isn't correct, here's a sample on how to iterate over JsonArray :

                Iterator<JsonElement> msg = jsonArray.iterator();
                while (msg.hasNext()) {
                    ////prints json array values
                    JsonElement eleTemp = msg.next();
                    JsonObject jObj = eleTemp.getAsJsonObject();
                    //... Other code
                }

这篇关于将json字符串打印到html表格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆