Java 如何在jsp中显示Json对象

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/20756970/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 04:07:12  来源:igfitidea点击:

How to display Json object in jsp

javajsonjspgson

提问by Anand

I'm newbie to jsp. I have a JSONcoding

我是jsp的新手。我有一个JSON编码

{"eventDetails":[{"startDate":1387175589253,"eventJSON":"{\"userIp\":\"***.***.***.**\",\"organizationUid\":\"4261-5404a609bd14\",\"userAgent\":\"Restlet-Framework\/2.1m3\",\"currentSessionToken\":\"9f3ee5b076-27dbead458ca\",\"endTime\":1312,\"apiKey\":\"b6bd9-30849cf17727\",\"startTime\":13853,\"sessionToken\":null,\"eventId\":\"4731d1-adb6-10faaa3ee269\",\"userUid\":null,\"userId\":1,\"context\":\"\/v2\/account\/loginas\/anonymous\",\"eventName\":\"user-loginAs\""

I need to display eventJSON object as a raw data :

我需要将 eventJSON 对象显示为原始数据:

{\"userIp\":\"204.236.177.80\",\"organizationUid\":\"4261739e-ccae-11e1-adfb-5404a609bd14\",\"userAgent\":\"Restlet-Framework\/2.1m3\",\"currentSessionToken\":\"9f3ee54a-4f5f-b076-27d8ca\",\"endTime\":1387175589312,\"apiKey\":\"b6b8-4ad5-96d9-3084927\",\"startTime\":1387175589253,\"sessionToken\":null,\"eventId\":\"478e8-4ed1-adb6-10faaa3ee269\",\"userUid\":null,\"userId\":11878,\"context\":\"\/v2\/act\/lonas\/anonymous\",\"eventName\":\"user-loginAs\"}

how to display eventJSON using gson and printing with c:out.

如何使用 gson 显示 eventJSON 并使用c:out.

JSP Page

JSP页面

<tr id="datalogList-${gC.index}">
<td id = "eventName-${gC.index}">
<c:out value="${datalog.eventName}" />
</td>   
<td id = "startTime-${gC.index}">
<c:out value="${datalog.startTime}" />
</td>  
<td id = "endTime-${gC.index}">
<c:out value="${datalog.endTime}" />
</td>
<td id = "apiKey-${gC.index}"></a>
<c:out value="${datalog.apiKey}" />
</td>
</tr> 

Java

爪哇

  Datalogging[]  logevents = (Datalogging[]) gson.fromJson(eventValueList.toString(),Datalogging[].class);

Thanks for reading.

谢谢阅读。

回答by Sureshkumar Panneerselvan

  1. You have it as a JavaScript variable like so:

    var persons = [ { "name": "John Doe", "address": "Main Street 1" }, { "name": "Jane Doe", "address": "Baker Street 1" }, { "name": "Hyman Doe", "address": "Church Street 1" } ];

  1. 你把它作为一个 JavaScript 变量,像这样:

    var people = [ { "name": "John Doe", "address": "Main Street 1" }, { "name": "Jane Doe", "address": "Baker Street 1" }, { "name" : "Hyman Doe", "address": "Church Street 1" } ];

I'd suggest to use jQuery to create a HTML table out of it.

我建议使用 jQuery 从中创建一个 HTML 表。

<!DOCTYPE html>
    <html lang="en">
      <head>
        <title>Test</title>
        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script>
            var persons = [
                { "name": "John Doe", "address": "Main Street 1" },
                { "name": "Jane Doe", "address": "Baker Street 1" },
                { "name": "Hyman Doe", "address": "Church Street 1" }
            ];
            $(document).ready(function() {
                var table = $('<table/>').appendTo($('#somediv'));
                $(persons).each(function(i, person) {
                    $('<tr/>').appendTo(table)
                        .append($('<td/>').text(person.name))
                        .append($('<td/>').text(person.address));
                });
            });
        </script>
      </head>
      <body>
        <div id="somediv"></div>
      </body>
    </html>

2. You have it as a Java String variable like so:

2. 你把它作为一个 Java String 变量,像这样:

String jsonPersons = "["
    + "{ \"name\": \"John Doe\", \"address\": \"Main Street 1\" },"
    + "{ \"name\": \"Jane Doe\", \"address\": \"Baker Street 1\" },"
    + "{ \"name\": \"Hyman Doe\", \"address\": \"Church Street 1\" }"
+ "]";

Then I suggest to use a JSON parser to get a List out of it, like Google Gson:

然后我建议使用 JSON 解析器从中获取列表,例如 Google Gson:

List<Person> persons = new Gson().fromJson(jsonPersons, new TypeToken<List<Person>>()       {}.getType());

Where the Person class look like this:

Person 类如下所示:

public class Person {
   private String name;
   private String address;
   // Add or generate getters/setters.
}

Let the servlet put it in the request scope and forward to JSP for display like so:

让 servlet 将其放入请求范围并转发到 JSP 进行显示,如下所示:

request.setAttribute("persons", persons); 
request.getRequestDispatcher("/WEB-INF/persons.jsp").forward(request, response);

In JSP, use JSTL to iterate over it:

在 JSP 中,使用 JSTL 对其进行迭代:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
<table>
 <c:forEach items="${persons}" var="person">
    <tr>
        <td>${person.name}</td>
        <td>${person.address}</td>
    </tr>
 </c:forEach>
</table>

3 Same as 2), you have it as a Java variable, but you'd like to obtain it by Ajax in JSP. Then create a Servlet class which does the following in doGet() method:

3 同2),你有它作为一个Java变量,但你想在JSP中通过Ajax获取它。然后创建一个 Servlet 类,它在 doGet() 方法中执行以下操作:

response.setCharacterEncoding("UTF-8");
response.setContentType("application/json");
response.getWriter().write(jsonPersons);

And call it by jQuery Ajax with a callback which does the same as 1).

并通过 jQuery Ajax 使用回调调用它,其作用与 1) 相同。

$(document).ready(function() {
  var table = $('<table/>').appendTo($('#somediv'));
  $.getJSON('url/to/servlet', function(persons) {
    persons.each(function(i, person) {
        $('<tr/>').appendTo(table)
            .append($('<td/>').text(person.name))
            .append($('<td/>').text(person.address));
    });
  });
});