【问题标题】:Pass two java List to GSON/JSON将两个 java List 传递给 GSON/JSON
【发布时间】:2013-04-03 15:55:13
【问题描述】:

我想将两个List<String> 传递给Gson,并在我的jQuery 中用$.post 捕获它们。目前我的 servlet 中有我的第一个列表:

String json_list = gson.toJson(suggested_list);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json_list);

我通过 $.post 得到它,如下所示:

$(document).ready(function() {
    $(".word_sugest").click(function() {
    var physical_exam =  jQuery("textarea#examination").val();
        $.post("MyServlet", { examination : physical_exam},function(responseJson) {
        var $textarea = $('<textarea rows="10" cols="20" id="words_suggested">').appendTo($('#words'));
        var areavalue = $('#words_suggested').val();    
            $.each(responseJson, function(key,value) {
            $('#words_suggested').val($('#words_suggested').val()+value+"\n");
            });
        });
    });
});

如何获得具有相同$.post Ajax-event 的另一个列表?有人可以帮忙吗?

【问题讨论】:

    标签: java jquery ajax servlets


    【解决方案1】:

    我认为最简单的解决方案是让您的 AJAX 调用返回 JSON 对象而不是列表。这样你就可以命名你的列表。以下是输出的示例:

    {
      list1: ["A", "B", "C", "D"],
      list2: ["R", "S", "T", "U", "V", "W"]
    }
    

    这是通过像这样创建一个 Java 对象来完成的:

    public class CustomObjResponse {
      private List<String> list1;
      private List<String> list2;
      // Getters/setters
    }
    

    然后,当您使用两个列表填充对象时,您的 Gson 调用将如下所示:

    String json_obj = gson.toJson(customObjResp);
    

    【讨论】:

    • 我会再添加一个替代方案来返回一些类对象的数组,其中该类将只包含一个列表对象,但绝对是我的 +1。另请注意,实际上 OP 的 servlet 已经返回一个 JSON
    • 如何用我的 jQuery 单独调用每个列表?
    • 分别调用responseJson.list1responseJson.list2
    • 另外,如果您不想创建额外的课程,您可以尝试List&lt;List&lt;String&gt;&gt; 解决方案。
    • 但是列表列表是一种非常丑陋的数据类型,语义很差。你必须问自己,“我代表什么数据?”我从未有过由列表正确建模的数据。 (不是说这是错的,只是我从来没有见过这么hackish的必要)
    【解决方案2】:

    其中一种方法是返回列表对象的列表并使用 JavaScript 相应地解析它们:

    List<List<String>> suggestedList = new ArrayList<List<String>>();
    suggestedList.add(new ArrayList<String>);
    suggestedList.add(new ArrayList<String>);
    String jsonList = gson.toJson(suggestedList);
    

    【讨论】:

    • 在这种情况下,如何在我的 jQuery 中单独获取每个列表?
    • 这是两个列表。使用两个 $.each 循环(第二个嵌套)访问它们,就像您迭代一个列表的方式一样,但在内部进行了额外的迭代。
    • 在这种情况下,我有一个对象列表。我怎样才能有两个单独的列表,例如List, List 并通过 $.post 获取它们?
    • 您可以拥有List&lt;List&lt;Vehicle&gt;&gt;,其中Vehicle 是公共超类。如果他们不分享Vehicle,他们将分享Object
    • 好不好的例子:)。我有一个 List 和一个 List。我运行我的 servlet 来获取一个 List,它是一些单词,我使用这些单词来查询数据库以获得一个 List。在这种情况下,我必须填充两个独立的列表。是否可以用 toJson 填充它们?
    猜你喜欢
    • 2020-03-02
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多