将json字符串打印到html表格 [英] Print json string to html table
问题描述
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); <<<这看起来是空的
任何帮助将不胜感激! (:
-
我不明白装入JSON的原因,if所有你想要做的就是使用scriptlets并显示它,你可以简单地将
输出
对象本身通过上下文发送到重定向页面。 -
我想你还有别的想法,谈论这个问题,你可以这样做:
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! (:
解决方案
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.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屋!