【问题标题】:How to store JSON in a variable如何将 JSON 存储在变量中
【发布时间】:2026-02-11 08:15:01
【问题描述】:

如何像数据库一样将数据存储为 JSON, 这样当用户注册时,信息应该存储在一个变量中?

例子:

我的 HTML 表单由输入文本字段名、姓氏组成。单击表单的注册按钮应将名字和姓氏的值存储在变量中。

我该怎么做:

 var txt = '{"employees":[' +
   '{"firstName":"John","lastName":"Doe" },' +
    '{"firstName":"Anna","lastName":"Smith" },' +
     '{"firstName":"Peter","lastName":"Jones" }]}';

【问题讨论】:

  • 你可以使用var json = JSON.parse(txt)
  • @ArunPJohny 我认为 OP 正在寻求另一个方向
  • 您是否有理由要使用 JSON?您无法真正进一步处理它,因为它只是文本。一个简单的对象或数组会更合适。
  • 我对 JSON 了解不多,请告诉我一个好的来源@ArunPJohny

标签: javascript jquery json


【解决方案1】:

听起来您想将 HTML 中的值转换为 JSON 字符串。假设<form> 看起来像这样

<form>
    <input type="text" name="nm1[]"/><input type="text" name="nm2[]"/>
    <input type="text" name="nm1[]"/><input type="text" name="nm2[]"/>
</form>

你可以使用getElementsByName两次,构建一个对象JSON.stringify

var nm1 = document.getElementsByName('nm1[]'),
    nm2 = document.getElementsByName('nm2[]'),
    i, o = {
        employees: []
    };
for (i = 0; i < nm1.length; ++i) {
    if (nm1[i].value && nm2[i].value)
        o.employees.push({
            firstName: nm1[i].value,
            lastName: nm2[i].value
        });
}
JSON.stringify(o);

DEMO(打开控制台)

【讨论】:

    【解决方案2】:

    您可以通过将数据附加到employees 数组中来将数据添加到实际数据结构中

    dataobj.employees.push({"firstName":$('input[name=firstn]').val(),
                            "lastName":$('input[name=lastn]').val() });
    

    当然,这需要首先将 JSON 解析为 dataobj。如果要通过GET发送,必须重新序列化。但可以POSTed直接作为数据对象!

    当然也可以从空数组开始,像初始化dataobj一样

    var dataobj={ employee: [] };
    

    在上述更新命令生效之前。

    很晚编辑...

    以防万一应该有多个名字/姓氏输入字段,那么以下将做一个“更好”的工作(因为它将查看所​​有字段并仅收集那些至少设置了一个名称的字段):

    var dataobj={employees:[]};
    function shw(){
      $('#out').text(JSON.stringify(dataobj).replace(/{/g,'\n{'));}
    $(function(){
      $('#clr').click(function(){dataobj.employees=[];shw()});
      $('#go').click(function(){
       var ln=$('input[name=lastn]').toArray();     // ln: JS-Array of DOM elements
       $('input[name=firstn]').each(function(i,fn){ // for each fn DOM-element ...
        var f=fn.value,l=ln[i].value;               // get values as strings
        if (f+l>'') dataobj.employees.push({firstName:f,lastName:l}); // push name object
       });shw();})
      shw();
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input type="text" name="firstn" value="John"><input type="text" name="lastn" value="Doe"><br>
    <input type="text" name="firstn" value="Anna"><input type="text" name="lastn" value="Smith"><br>
    <input type="text" name="firstn" value="Peter"><input type="text" name="lastn" value="Jones">
    <input type="button" id="go" value="append names">
    <input type="button" id="clr" value="clear">
    <pre id="out"></pre>

    【讨论】:

      【解决方案3】:

      轻松使用 Jquery

      var jsonArray;
      jsonArray.push($("#firstname").val();
      jsonArray.push($("#lastname").val();
      var myJsonString = JSON.stringify(jsonArray);
      

      【讨论】:

      • 唯一的 jQuery 部分是 $("...").val()。否则,您的代码会充满语法错误、运行时错误并使用令人困惑的变量名(如jsonArray)。如果你能正确初始化jsonArray,那么它将包含一个普通的JS数组,而不是JSON。
      • 再看这个解决方案,差不多两年后,我不得不同意 Felix:它行不通。第一行至少需要var jsonArray=[]; 才能与其余行保持一致。但即便如此,所有找到的名字(名字和姓氏一样)都会一起放入这个简单的数组中。如果输入字段的id 属性与其name 属性的值不同,则可能甚至找不到输入字段。 OP 只提到了name 属性。
      【解决方案4】:

      您可以使用数组的push方法来推送JSON数据。这显示在这里 - appending-to-a-json-object。在需要提交数据之前(比如process.php),stringify吧。

      【讨论】:

      • OP 没有数组,它们有文本。