首页 > 其他分享 >浅谈 JSON 对象和 FormData 相互转换

浅谈 JSON 对象和 FormData 相互转换

时间:2023-12-14 15:11:06浏览次数:28  
标签:obj 浅谈 form FormData json JSON 格式 formData

前言
大家都知道,前端在和后台进行交互联调时,肯定避免不了要传递参数,一般情况下,params 在 get 请求中使用,而 post 请求下,我们有两种常见的传参方式: JSON 对象格式和 formData 格式,但是一些场景是需要我们对这两种数据格式进行转换的,例如表单提交,有些是 JSON 对象格式的数据,有些是 FormData 格式的数据,这个时候就需要我们对其进行转换。

常见的 POST 提交数据方式

  1. application/x-www-form-urlencoded
    表单格式提交数据,通过 form 标签的 action 属性,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。

  2. multipart/form-data
    这也是一个常见的 post 数据提交的方式,我们使用表单上传文件时,就要让 form 的 enctype 等于这个值,多用于文件上传。

  3. application/json
    application/json 这个 Content-Type 作为响应头大家肯定不陌生,客观来说,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 json 字符串。由于 json 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 json 的函数,使用 json 不会遇上什么麻烦,并且 json 格式支持比键值对复杂的多的结构化数据。

  4. text/xml
    相比于 json,xml 不能更好的适用于数据交换,它包含了太多的包装,而且它跟大多数编程语言的数据模型不匹配,xml 是面向数据的,json 是面向对象和结构的。目前多用于 XML 存储数据,存储配置文件等需要结构化存储的地方使用。

JSON 格式和 formData 格式的区别
JSON 请求头:

JSON 负荷:

formData 请求头:

formData 负荷:

通过上面的几张图我们就能大概明白了,前端传的都是二进制数据,两者的 content-type 是不同的,json 我们已经序列化好了,而 formdata 还是需要进行处理。

formdata 的两种格式

multipart/form-data:既可以上传文件等二进制数据,也可以上传表单键值对,只是最后会转化为一条信息;
x-www-form-urlencoded:只能上传键值对,并且键值对都是间隔分开的。
json 对象转 formData
逐个转换

let obj = {
id: "001",
name: "小蓝",
age: "18",
sex: "女",
};
const formData = new FormData();
formData.append("id", obj.id);
formData.append("name", obj.name);
formData.append("age", obj.age);
formData.append("sex", obj.sex);
console.log(formData);
1
2
3
4
5
6
7
8
9
10
11
12
所有属性值转换

let obj = {
id: "001",
name: "小蓝",
age: "18",
sex: "女",
};
const formData = new FormData();
Object.keys(obj).map((key) => {
formData.append(key, obj[key]);
});
console.log(formData);
1
2
3
4
5
6
7
8
9
10
11
formData 对象转 json
var jsonObj = {};
formData.forEach((value, key) => (jsonObj[key] = value));
1
2
拓展 – base64 和文件流互转
文件流转 base64

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

base64 转文件流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

文章知识点与官方知识档案匹配,可进一步学习相关知识
————————————————
版权声明:本文为CSDN博主「水星记_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Shids_/article/details/128931933

标签:obj,浅谈,form,FormData,json,JSON,格式,formData
From: https://www.cnblogs.com/zzt-lovelinlin/p/17901226.html

相关文章

  • 浅谈一下对SpringBoot的理解
    简化Spring+SpringMVC的开发1.Maven导入依赖Starter依赖管理:SpringBoot的Starter依赖简化了项目的依赖管理。通过导入预配置的Starter依赖,开发者可以轻松地引入一组相关的库和配置,而无需手动管理每个库的版本和依赖关系。约定大于配置:使用Starter依赖遵循了Spri......
  • 转DM8的SQL性能优化思路浅谈系列(二)
    ########sample2  https://www.modb.pro/db/635695干货攻略】达梦数据库DM8的SQL性能优化思路浅谈系列(二)们在上一次的分享中已介绍SQL优化的重要性,预估执行计划生成及基础说明和达梦性能分析思路。今天我们接着来聊一下达梦数据库参数调整、跟踪存储过程中的慢SQL思路及辅......
  • MySQL使用JSON存储数据
    1.优点1.不用为数据中的每个key值新建一个字段,可以任意的增减字段而无需修改数据表结构,甚至可以减少数据表的设计。2.可以减少数据表的查询,减少关联查询,一个查询的结果就可以代替几个查询的结果,降低数据库服务器的压力。2.缺点1、json数据仅仅只能用于展示display,如果用于条件......
  • 浅谈一类边权带指数的图论问题
    偶然看到了这道题,求的是边权为\(n^w\)次方时树上的第\(k\)小路径,觉得这类题目很有意思,就研究了一下。1.CF464ETheClassicProblem题意:给一个无向图,每条边的边权是\(2^{w_i}\),求\(s\)到\(t\)的最短路。思路:首先,我们可以把距离看成一个二进制数,那么我们需要能支持快......
  • `/etc/gitlab/gitlab-secrets.json`文件丢失时Gitlab恢复办法
    当/etc/gitlab/gitlab-secrets.json文件丢失时如果您没有备份secrets文件,则必须完成几个步骤才能使GitLab重新正常工作。secrets文件负责存储包含必需的敏感信息的列的加密密钥。如果密钥丢失,GitLab将无法解密这些列,从而阻止对以下项目的访问:CI/CD变量Kubernetes/GCP集成自......
  • 浅谈设计模式-工厂模式的设计思想以及细节问题(上篇)
    1什么是工厂模式?工厂模式,顾名思义,就是把将对象的实例化过程封装在工厂类中的方式。工厂负责生产相应的对象实例。一般分为两种工厂模式:简单工厂;抽象工厂优点:用户不需要解决具体的细节问题,利用工厂类进行生产产品细节;可以将对象的创建与使用代码分离,提供一种统一的接口来创建不同类......
  • 01C# 从Json文件中读取配置
    目的:从Json文件中读取配置 1)创建一个json文件,设置“如果较新则复制”{"Smtp":{"Server":"yx165.com","Name":"yx","Password":"123456"},"Person":{"Name":"......
  • 【教程】浅谈ios混淆和加固加密
    ​混淆:针对项目代码,代码混淆通常将代码中的各种元素(变量、函数、类名等)改为无意义的名字,使得阅读的人无法通过名称猜测其用途,增大反编译者的理解难度。虽然代码混淆可以提高反编译的门槛,但是对开发者本身也增大了调试除错的难度。开发人员通常需要保留原始未混淆代码用于调试。......
  • Java登陆第二十三天——JavaScript对象、JSON、事件
    JS中声明对象的两种格式方法1,newobject()然后依次添加属性或方法栗子:<script>//初始化对象varuser=newObject();//给对象添加属性并赋值user.name="张三";user.age=18;//给对象添加方法user.say=functi......
  • vscode settings.json
    {"workbench.startupEditor":"none","workbench.iconTheme":"vscode-icons","workbench.colorTheme":"Dracula","window.title":"${rootName}${separator}${profileName}",......