取所有输入值并为其创建一个json对象

时间:2019-05-16 14:07:43

标签: javascript jquery json

我从我的数据库中获取json并将其解析为和数组,并使输入字段位于数组之外,以便用户可以编辑输入字段。哪种方法工作正常,但我却很难制作一个函数来读取所有输入字段的值,然后再次将它们保存在这样的数组中:

 0: {Jaar: "2016-2017", Stadsdeel (7): "Centrum", %: "31,2", n: 144, N: 461, …}
 1: {Jaar: "2016-2017", Stadsdeel (7): "West", %: "38,4", n: 371, N: 966, …}
 2: {Jaar: "2016-2017", Stadsdeel (7): "Nieuw-West", %: "31,5", n: 505, N: 1605, …}
 3: {Jaar: "2016-2017", Stadsdeel (7): "Zuid", %: "34,5", n: 325, N: 943, …}
 4: {Jaar: "2016-2017", Stadsdeel (7): "Oost", %: "35,9", n: 529, N: 1475, …}
 5: {Jaar: "2016-2017", Stadsdeel (7): "Noord", %: "36,5", n: 374, N: 1024, …}
 6: {Jaar: "2016-2017", Stadsdeel (7): "Zuidoost", %: "40,7", n: 361, N: 886, …}
 7: {Jaar: "2016-2017", Stadsdeel (7): "Totaal", %: "35,4", n: 2608, N: 7359, …}
 8: {Jaar: null}

所以我可以JSON.stringify()数组并将其放入数据库中,到目前为止,我一直在尝试构建类似的函数,而这正是我所想的

function update() {
        console.log(Object.keys(data[1]));
        for(let i = 0; i < data.length; ++i){
            let names_length = Object.keys(data[i]);
            let main_obj = {};
            for(let j = 0; j < names_length.length; ++j) {
                let a = document.getElementById('start' + names_length[j]).value;
                let b = document.getElementById(i + names_length[j]).value;
                console.log(b);
                console.log(a);
                var obj = {key : b};
                obj[a] = obj['key'];
                delete obj['key'];
                console.log(obj);
            }
        }
    }

但是问题是该函数使小对象产生,但是我想再次使像这样的大对象{Jaar: "2016-2017", Stadsdeel (7): "Totaal", %: "35,4", n: 2608, N: 7359, …}而不是函数生成此输出{Stadsdeel (7): "Centrum"},该输出最终会在数组中的所有小对象中产生所以数组看起来像这样:[[{}{}{}],[{}{}{}],[{}{}{}]]而不是这样:[{},{},{}]我真的很难想到一个function,在这种情况下可以解决我的问题,如果它在javascript or jquery

var data;
    var names;
    var json_object = [];

    init();
    function init() {
        var json_data = '{{$metric->data_json_version}}';
        let json_data_replaced = json_data.replace(/&quot;/g, '"');
        try {
            data = JSON.parse(json_data_replaced);
            displayData();
        } catch (error) {
            console.error(error);
        }
    }

    function displayData() {
        console.log(data);
        for(let i = 0; i < data.length; ++i){
            names = Object.keys(data[i]);
            for(let j = 0; j < names.length; ++j){
                let vw = 90 / names.length;
                let a = document.createElement("input");
                let c = document.createElement("input");
                let b = names[j];
                c.setAttribute('type', 'text');
                c.style.width = vw + 'vw';
                c.setAttribute('value', names[j]);
                c.setAttribute('id', 'start' + names[j]);
                c.readOnly = true;
                a.setAttribute('type', 'text');
                a.style.width = vw + 'vw';
                a.setAttribute('id', i + names[j]);
                a.setAttribute('value', data[i][b]);
                if(i === 0){document.getElementById("labels_for_data").appendChild(c);}
                document.getElementById("data_preview_metric").appendChild(a);
                if((j + 1) === (names.length)){
                    let br = document.createElement("br");
                    let next_sib = a.nextSibling;
                    if (next_sib) { document.getElementById('data_preview_metric').insertBefore(br, next_sib); }
                    else { document.getElementById('data_preview_metric').appendChild(br); }
                }
            }
        }
    }

由javascript生成的html:

 <div id="labels_for_data">

        <br>
  <input type="text" value="Jaar" id="startJaar" readonly="" style="width: 15vw;">
  <input type="text" value="Stadsdeel (7)" id="startStadsdeel (7)" readonly="" style="width: 15vw;">
  <input type="text" value="%" id="start%" readonly="" style="width: 15vw;">
  <input type="text" value="n" id="startn" readonly="" style="width: 15vw;">
  <input type="text" value="N" id="startN" readonly="" style="width: 15vw;">
  <input type="text" value="" id="start" readonly="" style="width: 15vw;"></div>

  <div id="data_preview_metric">

  <input type="text" id="0Jaar" value="2016-2017" style="width: 15vw;"> 
  <input type="text" id="0Stadsdeel (7)" value="Centrum" style="width: 15vw;">
  <input type="text" id="0%" value="31,2" style="width: 15vw;">
  <input type="text" id="0n" value="144" style="width: 15vw;">
  <input type="text" id="0N" value="461" style="width: 15vw;">
  <input type="text" id="0" value="null" style="width: 15vw;"><br>
  <input type="text" id="1Jaar" value="2016-2017" style="width: 15vw;"> 
  <input type="text" id="1Stadsdeel (7)" value="West" style="width: 15vw;">
  <input type="text" id="1%" value="38,4" style="width: 15vw;">
  <input type="text" id="1n" value="371" style="width: 15vw;">
  <input type="text" id="1N" value="966" style="width: 15vw;">
  <input type="text" id="1" value="null" style="width: 15vw;"><br>
  <input type="text" id="2Jaar" value="2016-2017" style="width: 15vw;"> 
  <input type="text" id="2Stadsdeel (7)" value="Nieuw-West" style="width: 15vw;">
  <input type="text" id="2%" value="31,5" style="width: 15vw;">
  <input type="text" id="2n" value="505" style="width: 15vw;">
  <input type="text" id="2N" value="1605" style="width: 15vw;">
  <input type="text" id="2" value="null" style="width: 15vw;"><br>
  <input type="text" id="3Jaar" value="2016-2017" style="width: 15vw;"> 
  <input type="text" id="3Stadsdeel (7)" value="Zuid" style="width: 15vw;">
  <input type="text" id="3%" value="34,5" style="width: 15vw;">
  <input type="text" id="3n" value="325" style="width: 15vw;">
  <input type="text" id="3N" value="943" style="width: 15vw;">
  <input type="text" id="3" value="null" style="width: 15vw;"><br>
  <input type="text" id="4Jaar" value="2016-2017" style="width: 15vw;"> 
  <input type="text" id="4Stadsdeel (7)" value="Oost" style="width: 15vw;">
  <input type="text" id="4%" value="35,9" style="width: 15vw;">
  <input type="text" id="4n" value="529" style="width: 15vw;">
  <input type="text" id="4N" value="1475" style="width: 15vw;">
  <input type="text" id="4" value="null" style="width: 15vw;"><br>
  <input type="text" id="5Jaar" value="2016-2017" style="width: 15vw;"> 
  <input type="text" id="5Stadsdeel (7)" value="Noord" style="width: 15vw;">
  <input type="text" id="5%" value="36,5" style="width: 15vw;">
  <input type="text" id="5n" value="374" style="width: 15vw;">
  <input type="text" id="5N" value="1024" style="width: 15vw;">
  <input type="text" id="5" value="null" style="width: 15vw;"><br>
  <input type="text" id="6Jaar" value="2016-2017" style="width: 15vw;"> 
  <input type="text" id="6Stadsdeel (7)" value="Zuidoost" style="width: 15vw;">
  <input type="text" id="6%" value="40,7" style="width: 15vw;">
  <input type="text" id="6n" value="361" style="width: 15vw;">
  <input type="text" id="6N" value="886" style="width: 15vw;">
  <input type="text" id="6" value="null" style="width: 15vw;"><br>
  <input type="text" id="7Jaar" value="2016-2017" style="width: 15vw;"> 
  <input type="text" id="7Stadsdeel (7)" value="Totaal" style="width: 15vw;">
  <input type="text" id="7%" value="35,4" style="width: 15vw;">
  <input type="text" id="7n" value="2608" style="width: 15vw;">
  <input type="text" id="7N" value="7359" style="width: 15vw;">
  <input type="text" id="7" value="null" style="width: 15vw;"><br>
  <input type="text" id="8Jaar" value="null" style="width: 90vw;"><br></div>
    <button onclick="update()" type="button">Submit</button>

0 个答案:

没有答案