将序列化表单的数据转换为json对象

时间:2014-04-25 07:43:36

标签: jquery asp.net-mvc json serialization

我有一个类似以下的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 

6 个答案:

答案 0 :(得分:36)

更改您的陈述

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

答案 1 :(得分:16)

使用以下代码!!!

    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);

答案 2 :(得分: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);

答案 3 :(得分:3)

你可以用它来制作一个包含所有形式字段的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;
});

使用FormData的纯JavaScript:

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);

答案 4 :(得分:2)

现代诠释。编译对象扩展运算符需要使用babel stage-2预设



// 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')
)




答案 5 :(得分:1)

您可以使用: jquery.serializeToJSON - https://github.com/raphaelm22/jquery.serializeToJSON 它准备使用表单ASP MVC