Преобразование сериализованных данных формы в объект json
У меня есть cshtml, как показано ниже.
@using (Html.BeginForm("Save", "Plans", FormMethod.Post, new { @class = "form-horizontal", id = "floorplan-form" }))
{
@Html.TextBoxFor(m => m.FloorPlan.Name, new { placeholder = "Enter text", @class = "form-control" })
@Html.DropDownListFor(m => m.FloorPlan.GroupId, new SelectList(Model.FloorPlanGroups, "Id", "Name"))
}
В моем javascript (в отдельном файле javascript) я пытаюсь сериализовать эту форму и преобразовать ее в объект JSON.
var formData = $("#floorplan-form").serialize();
console.info(formData);
выводит
FloorPlan.Name=Test&FloorPlan.GroupId=15
И
var formData = $("#floorplan-form").serializeArray();
console.info(formData);
дает мне:
![Screen capture]()
Я пробовал делать это
var formData = JSON.parse($("#floorplan-form").serializeArray());
Но я получаю эту ошибку:
Uncaught SyntaxError: Unexpected token o
Ответы
Ответ 1
Измените ваше выражение
var formData = JSON.parse($("#floorplan-form").serializeArray());
с
var formData = JSON.stringify(jQuery('#frm').serializeArray()); // store json string
или
var formData = JSON.parse(JSON.stringify(jQuery('#frm').serializeArray())) // store json object
Ответ 2
Используйте приведенный ниже код.
var data = $("form").serialize().split("&");
console.log(data);
var obj={};
for(var key in data)
{
console.log(data[key]);
obj[data[key].split("=")[0]] = data[key].split("=")[1];
}
console.log(obj);
Ответ 3
Вы можете использовать: jquery.serializeToJSON - https://github.com/raphaelm22/jquery.serializeToJSON
Он готов работать с формами ASP MVC
Ответ 4
function jQFormSerializeArrToJson(formSerializeArr){
var jsonObj = {};
jQuery.map( formSerializeArr, function( n, i ) {
jsonObj[n.name] = n.value;
});
return jsonObj;
}
Используйте эту функцию. Это будет работать только с jquery.
var serializedArr = $("#floorplan-form").serializeArray();
var properJsonObj = jQFormSerializeArrToJson(serializedArr);
Ответ 5
Современная интерпретация. Babel stage-2 preset требуется для компиляции оператора распространения объектов
// serializeToJSON :: String -> JSON
const serializeToJSON = str =>
str.split('&')
.map(x => x.split('='))
.reduce((acc, [key, value]) => ({
...acc,
[key]: isNaN(value) ? value : Number(value)
}), {})
console.log(
serializeToJSON('foo=1&bar=2&baz=three')
)
Ответ 6
Вы можете использовать это для создания json со всеми полями формы.
Пример Jquery:
$('form').serializeArray().reduce(function(accumulator,currentValue, currentIndex){
if(currentIndex === 1){
var json = {};
json[accumulator.name] = accumulator.value;
return json;
}
accumulator[currentValue.name] = currentValue.value;
return accumulator;
});
Чистый JavaScript с FormData:
var formdata = new FormData(document.querySelector('form'));
var getJsonFromFormData = (formData) => {
var json = {};
for (item of formData.keys()){
json[item] = formData.get(item);
}
return json;
}
var json = getJsdonFromFormData(formdata);