【问题标题】:how to create a json object in jsp?如何在jsp中创建一个json对象?
【发布时间】:2013-03-01 01:34:39
【问题描述】:

我创建了一个输入字段很少的 JSP 页面。当我点击 submin 时,我需要 javascript 来创建 json 对象并将输入值放入其中,我想在同一个 jsp 页面中显示 json 数据。

这是我的表格

<form name="jsond" method="get">
<br>
<p id="msg"></p>
First Name:
<input type="text" id="firstName"/><br>
Last Name:
<input type="text" id="lastName"/><br>
E-mail:
<input type="text" id="email"/><br>
Mobile No:
<input type="text" id="mobile"/><br>
Place:
<input type="text" id="place"/><br>
Country:
<input type="text" id="country"/><br>
<br>
<input type="submit" name="submit" value="Submit" onclick="return submitForm(this, event);">
</form>

这是我的脚本

function submitForm(thisObj, thisEvent) {
       var firstName = document.forms["jssond"]["firstName"].value;
       var lastName = document.forms["jssond"]["lastName"].value;
       var email = document.forms["jssond"]["email"].value;
       var mobile = document.forms["jssond"]["mobile"].value;
       var place = document.forms["jssond"]["place"].value;
       var country = document.forms["jssond"]["country"].value;

// How to do the remaining code? I want to store the above variables in json object and display json values in <p id="msg"></p>

如何将 json 对象从 javascript 传递给 servlet?

谢谢

【问题讨论】:

标签: javascript json jsp servlets


【解决方案1】:

您可以在 javascript 中创建对象,然后使用JSON.stringify 将 JSON 创建为文本。

function submitForm(thisObj, thisEvent) {
   var object = {
       firstName: document.forms["jssond"]["firstName"].value,
       lastName: document.forms["jssond"]["lastName"].value,
       email: document.forms["jssond"]["email"].value,
       mobile: document.forms["jssond"]["mobile"].value,
       place: document.forms["jssond"]["place"].value,
       country: document.forms["jssond"]["country"].value
   };
   document.getElementById('msg').innerHTML = JSON.stringify(object);
}

【讨论】:

    【解决方案2】:

    JSON 与具有键值对的 JavaScript 对象非常相似,它比您想象的要简单 :)

    // retrieve the form values
    var firstName = document.forms["jssond"]["firstName"].value;
    var lastName = document.forms["jssond"]["lastName"].value;
    var email = document.forms["jssond"]["email"].value;
    var mobile = document.forms["jssond"]["mobile"].value;
    var place = document.forms["jssond"]["place"].value;
    var country = document.forms["jssond"]["country"].value;
    
    // create JSON
    var jsonObj = {
        "firstname": firstName,
        "lastName": lastName,
        "email": email,
        "mobile": mobile,
        "place": place,
        "country": country
    };
    // convert JSON to string
    var jsonString = JSON.stringify(jsonObj);
    

    以表单形式提交 JSON:

    submit的形式提交JSON数据:

    假设您在表单中有一个隐藏字段,用于保存 JSON 字符串值:

    <input type=hidden" id="jsonData" name="jsonData" />
    

    创建jsonString后,可以将JSON字符串值放入隐藏的表单元素中:

    document.getElementById('jsonData').value = jsonString;
    

    处理 JSON 服务器端:

    在您处理表单提交操作的服务器端代码中,例如在 PHP 中(无论您使用什么语言,都可能有等效的东西):

    <?php
        $jsonObject = json_decode($_POST['jsonData'], true);
    ?>
    

    所以$jsonObject 现在是这种格式的关联数组:

    [
        "firstName" => "...",
        "lastName" => "...",
        "email" => "...",
        "mobile" => "...",
        "place" => "...",
        "country" => "..." 
    ]
    

    在 Java 中:

    // Assuming 'request' is HttpServletRequest
    
    String jsonString = request.getParameter("jsonData");
    JSONObject jsonObject = (JSONObject) JSONValue.parse(jsonString);
    

    【讨论】:

    • 不,JSON 不是 JavaScript 对象。 JSON 是一种文本 数据表示,就像 XML 一样。要从对象创建 JSON,您必须调用 JSON.stringify。将 JavaScript 对象/数组字面量称为 JSON 是一个常见错误,但这是错误且令人困惑的,尤其是对于初学者而言。
    • @FelixKling JSON 格式基于 JavaScript。我并不是说 JSON 是 JavaScript 中的一个对象。我只是说两者的表示几乎相同。在这个问题的上下文中,如果我们想将 JSON 表示为字符串,JSON.stringify 将是下一步。这将是{"firstname": firstName,"lastName": lastName,"email": email,"mobile": mobile,"place": place,"country": country}(但用实际值代替变量名)。但他没有具体说明他想如何输出 JSON,所以我们要如何表示它取决于他。
    • 是的,语法相似,但这并不意味着可以互换使用该术语。实际上,您确实说过“嗯,JSON 只是一个带有键值对的 JavaScript 对象”。您的 jsonObj 不是 JSON nor a JSON object,它只是一个对象。而 JSON 在 JavaScript 中只能作为字符串存在。
    • @sweetamylase 我想将 JSON 表示为字符串
    • JSON 是一种 数据格式,与 ECMAScript Object 初始化器使用的表示法相似并兼容。它是一个结构化的字符串,可以解析为一个 ECMAScript 对象(反之则不然)。唯一的“JSON 对象”是(现在是内置的)解析和生成 JSON 内容的对象。
    【解决方案3】:
    function submitForm(thisObj, thisEvent) {
       var firstName = document.forms["jssond"]["firstName"].value;
       var lastName = document.forms["jssond"]["lastName"].value;
       var email = document.forms["jssond"]["email"].value;
       var mobile = document.forms["jssond"]["mobile"].value;
       var place = document.forms["jssond"]["place"].value;
       var country = document.forms["jssond"]["country"].value;
    
       var json = {
           firstName: firstName,
           lastName: lastName,
           email: email,
           mobile: mobile,
           place: place,
           country: country
       };
       // Displaying is up to you
    

    您真的应该查找最新的 javascript/json 教程。 document.forms[etc] 已被弃用 15 年左右。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      相关资源
      最近更新 更多