如何使用JSON将对象从Java传递到JavaScript?

如何使用JSON将对象从Java传递到JavaScript?,javascript,json,jsp,servlets,Javascript,Json,Jsp,Servlets,不久前,我得到了使用JSON将东西从我的应用程序传递到JavaScript的答案。我不明白的是,我实际上是如何将对象传递给JavaScript的,因为我发现必须使用.json文件 然后呢?我能够将Java对象转换为JSON对象,但这是我无法理解的。我正在使用JSP和servlet来编写我的应用程序。JSON基本上是一种Javascript对象存储格式。因此,它是Javascript的本机代码 加载JSON文件 当您的网页像这样加载时,您可以加载JSON文件,就像任何.js文件一样: <ht

不久前,我得到了使用JSON将东西从我的应用程序传递到JavaScript的答案。我不明白的是,我实际上是如何将对象传递给JavaScript的,因为我发现必须使用.json文件


然后呢?我能够将Java对象转换为JSON对象,但这是我无法理解的。我正在使用JSP和servlet来编写我的应用程序。

JSON基本上是一种Javascript对象存储格式。因此,它是Javascript的本机代码

加载JSON文件 当您的网页像这样加载时,您可以加载JSON文件,就像任何.js文件一样:

<html>
<head>
<script type="text/javascript" src="myfile.json"></script>
</head>

—clipped—
其中,anz()的定义如下:

function anz(JSONdata) {
    //process data here
}

JSON也可以在页面呈现/加载后加载


从JSON文件获取数据 所以,一旦加载了JSON文件,并使用JSON数据调用回调函数,您就可以读取它——就像其他任何文件一样

如果已将其传递给回调函数

{"data":{"user_name":"Joe", "user_id":"97304239042", "user_rank":3}}
…要获取用户名,请执行以下操作:

function anz(JSONdata) {
    var userName = JSONdata.data.user_name;
    // userName returns "Joe"
}

文件扩展名
.json
与此无关。它只是关于HTTP头的。只要它是
application/json
,网络浏览器就完全知道如何处理它。对于JSP/Servlet,您基本上需要创建一个Servlet类,该类侦听特定的
url模式
,相应地处理请求参数或路径信息,并将JSON字符串写入
doGet()
方法中的响应

下面是一个虚构的servlet示例,它根据国家/地区下拉列表中的选定值返回城市选项值/标签对,用于将完整的Java对象转换为oneliner中的JSON:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String country = request.getParameter("country");
    Map<String, String> cities = cityDAO.find(country);
    String json = new Gson().toJson(cities);
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(json);
}
以下是JSP的相应HTML示例:

<select id="country" name="country">
    <c:forEach items="${countries}" var="country">
        <option value="${country.key}">${country.value}</option>
    </c:forEach>
</select>
<select id="city" name="city">
    <option>Please select country</option>
</select>

${country.value}
请选择国家/地区
(假设
${countries}
是应用范围内的
地图

希望这件事能澄清其中一件:)

另见:
$(document).ready(function() {
    $('#country').change(function() {
        var selectedCountry = $(this).val();
        var servletUrl = 'cities?country=' + selectedCountry;

        $.getJSON(servletUrl, function(options) {
            var city = $('#city');
            $('>option', city).remove(); // Clean old options first.
            if (options) {
                $.each(options, function(value, label) {
                    dropdown2.append($('<option/>').val(value).text(label));
                });
            } else {
                dropdown2.append($('<option/>').text("Please select country"));
            }
        });
    });
});
<select id="country" name="country">
    <c:forEach items="${countries}" var="country">
        <option value="${country.key}">${country.value}</option>
    </c:forEach>
</select>
<select id="city" name="city">
    <option>Please select country</option>
</select>