2017-09-04 41 views
0

我被困在下面的问题之前,合并两个元素:如何解析它们变成JSON

我已经创建了输入被解析到JSON在证明我(后来它的形式会。被传输) 现在从每个输入字段输出一个单独的元素获得,请参见:

{ 
    "hash": "", 
    "serviceVersion": "0.5", 
    "subject": "yadayada", 
    "organisator": "dinitante", 
    "roomstyle": [ 
    "kno" 
    "da" 
    ] 
} 

的目标是“organisator”和“roomstyle”到“addednote”相结合,并替换这两个输出。 我尝试过各种东西,但无法得到它的工作,这似乎工作,但我不知道在哪里有改变输出开始:

function join_note() 
{ 
var organisator = document.getElementById('organisator').value; 
var roomstyle = document.getElementById('roomstyle').value; 
document.getElementById('jointnote').value = roomstyle+organisator; 
alert(document.getElementById('jointnote').value); 
} 

这是需要输入的JS(巴贝尔)并以JSON显示输出:

const isValidElement = element => { 
    return element.name && element.value; 
}; 


const isValidValue = element => { 
    return (!['checkbox', 'radio'].includes(element.type) || element.checked); 
}; 


const isCheckbox = element => element.type === 'checkbox'; 
const isMultiSelect = element => element.options && element.multiple; 


const getSelectValues = options => [].reduce.call(options, (values, option) => { 
    return option.selected ? values.concat(option.value) : values; 
}, []); 

const formToJSON_deconstructed = elements => { 
    const reducerFunction = (data, element) => { 
    data[element.name] = element.value; 
    console.log(JSON.stringify(data)); 
    return data; 
    }; 
    const reducerInitialValue = {}; 
    console.log('Initial `data` value:', JSON.stringify(reducerInitialValue)); 
    const formData = [].reduce.call(elements, reducerFunction, reducerInitialValue); 
    return formData; 
}; 
const formToJSON = elements => [].reduce.call(elements, (data, element) => { 
    if (isValidElement(element) && isValidValue(element)) { 
    if (isCheckbox(element)) { 
     data[element.name] = (data[element.name] || []).concat(element.value); 
    } else if (isMultiSelect(element)) { 
     data[element.name] = getSelectValues(element); 
    } else { 
     data[element.name] = element.value; 
    } 
    } 

    return data; 
}, {}); 
const handleFormSubmit = event => { 
    event.preventDefault(); 
    const data = formToJSON(form.elements); 
    const dataContainer = document.getElementsByClassName('results__display')[0]; 
    dataContainer.textContent = JSON.stringify(data, null, " "); 
}; 
const form = document.getElementsByClassName('contact-form')[0]; 
form.addEventListener('submit', handleFormSubmit); 
+1

你可以使用所产生的JS和HTML – mplungjan

+0

[Codepen示例](https://codepen.io/sprunge1创建[MCVE]/pen/qXvMmd) – Chris

+1

点击'<>'你可以在这里发布 – mplungjan

回答

1

您可以在发送表单之前捕获表单数据并操作json。

const json = { 
    "hash": "", 
    "serviceVersion": "0.5", 
    "subject": "yadayada", 
    "organisator": "dinitante", 
    "roomstyle": [ 
    "kno" 
    "da" 
    ] 
}; 

json.addednote = [ 
    ...json.organisator, 
    ...json.roomstyle, 
]; 

delete json.organisator; 
delete json.roomstyle; 

// You have a ready json object 

没有蔓延运营商:

json.addednote = [ 
    json.organisator, 
]; 

json.roomstyle.forEach(x => (json.addednote.push(x)));