简体   繁体   English

隐蔽表单数据到JSON字符串

[英]Covert form data to JSON string

<form name = 'test' >
    <input type='text' name = 'login'>
    <input type='email' name = 'email'>
</form>

If I use JSON.serialize($(form)).serializeArray(); 如果我使用JSON.serialize($(form)).serializeArray();
I get [{"name":"login","value":"a value"},{"name":"email","value":"a email"}] while I need {"login":"a login","email":"a email"} . 我得到[{"name":"login","value":"a value"},{"name":"email","value":"a email"}]而我需要{"login":"a login","email":"a email"} How to do that?? 怎么做??

You could use this: 您可以使用此:

JSON.stringify($(form).serializeArray().reduce((acc, f) => {
  acc[f.name] = f.value
  return acc
}, {})

You can pass the <form> to FormData() , iterate key, value pairs of FormData instance, set each key and value to an object property and value 您可以将<form>传递给FormData() ,迭代键, FormData实例的值对,将每个键和值设置为对象的属性和值

 let form = document.forms["test"]; let fd = new FormData(form); let data = {}; for (let [key, prop] of fd) { data[key] = prop; } data = JSON.stringify(data, null, 2); console.log(data); 
 <form name='test'> <input type='text' name='login' value="a login"> <input type='email' name='email' value="a email"> </form> 

Another way to do this, using plain js and form.elements as an argument to Array.reduce 另一种方法,使用纯js和form.elements作为Array.reduce的参数

 var d = [].reduce.call(document.forms['test'].elements,(a,b)=>(a[b.name]=b.value,a),{}); var j = JSON.stringify(d, 0, 4); console.log(j); 
 <form name='test'> <input type='text' name='login'> <input type='email' name='email'> </form> 

Using jQuery 使用jQuery

 var data = $('form :input').toArray().reduce( (a,b) => (a[b.name]=b.value,a),{}) var json = JSON.stringify(data,0,4); console.log(data); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form name='test'> <input type='text' name='login'> <input type='email' name='email'> </form> 

If you want javascript object: 如果要使用javascript对象:

 let dest = {};
 $( form )
     .serializeArray()
     .map( input => dest[ input.name ] = input.value );

And the Json: 和杰森:

 console.log( JSON.stringify( dest ) );

if you get this 如果你得到这个

[{"name":"login","value":"a value"},{"name":"email","value":"a email"}];

and you need just 而你只需要

{"name":"login","value":"a value"}

just call the variable by their index 只需按其索引调用变量

 var data = [{"name":"login","value":"a value"},{"name":"email","value":"a email"}]; console.log( data[0] ) 

real quick solution that utilizes .serializeArray() would be: 使用.serializeArray()的真正快速解决方案是:

var objArr = JSON.serialize($(form)).serializeArray();
var obj = objArr.pop();
var strJson = JSON.serialize(obj);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM