Javascript从动态输入值生成并打印JSON

时间:2013-06-13 05:56:49

标签: javascript html arrays json dynamic

我想在不使用Jquery的情况下在纯Javascript中执行此操作。我发现的所有示例都使用JQuery。

我有一个带有

的html页面(index.html)
<form id="1">
 <input type="text">10</input>
 <input type="text">20</input>
</form>

<form id="2">
 <input type="text">55</input>
 <input type="text">66</input>
</form>

我想在另一个页面(data.json)中打印这个,

[
    {
        "1": [
            "10",
            "20"
        ],
        "2": [
            "55",
            "66"
        ]
    }
]

在一个单独的文件(makejson.js)中,我有一个JQuery语法,我想将其更改为纯Javascript,

function makeJSON() {
jsonObj = [];
$("input[type=text]").each(function() {

    var inData = $(this).val();

    item = {}
    item ["1"] = inData;

    jsonObj.push(item);
  });
}

这当前不起作用,它仅适用于来自“1”参数(表单id 1)的数组。我需要能够动态循环的东西(即“i = 0; i&lt; array.length; i ++”),它确定来自表单id 1的数组1和来自表单id 2的数组2。

如何收集输入,将其转换为JSON并将其保存到单独的页面?

1 个答案:

答案 0 :(得分:0)

简单的Javascript解决方案:

<强> jsFiddle Demo

function makeJSON(){
    var arr = [{}];
    var inputs;
    var jsonString;

    var forms = document.forms;
    for(var i=0; i<forms.length; i++){

        if(typeof(arr[0][forms[i].id]) == 'undefined'){
          arr[0][forms[i].id] = [];
        }

        for(var ii=0; ii<forms[i].elements.length; ii++){
          arr[0][forms[i].id].push(forms[i].elements[ii].value)
        }

    }

    jsonString = JSON.stringify(arr);
    console.log(jsonString);
}

输出JSON字符串:

[
    {
        "1": [
            "10",
            "20"
        ],
        "2": [
            "55",
            "66"
        ]
    }
]