浅谈 JSON 对象和 FormData 相互转换,打通前端与后端的通信血脉

这篇具有很好参考价值的文章主要介绍了浅谈 JSON 对象和 FormData 相互转换,打通前端与后端的通信血脉。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

大家都知道,前端在和后台进行交互联调时,肯定避免不了要传递参数,一般情况下,paramsget 请求中使用,而 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 数据提交的方式,我们使用表单上传文件时,就要让 formenctype 等于这个值,多用于文件上传。

3. application/json

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

4. text/xml

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


JSON 格式和 formData 格式的区别

JSON 请求头:

浅谈 JSON 对象和 FormData 相互转换,打通前端与后端的通信血脉


JSON 负荷:

浅谈 JSON 对象和 FormData 相互转换,打通前端与后端的通信血脉


formData 请求头:

浅谈 JSON 对象和 FormData 相互转换,打通前端与后端的通信血脉


formData 负荷:

浅谈 JSON 对象和 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);

所有属性值转换

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

formData 对象转 json

var jsonObj = {};
formData.forEach((value, key) => (jsonObj[key] = value));

拓展 – base64 和文件流互转

文件流转 base64

<template>
  <div>
    <input type="file" @change="handleFileChange" />
  </div>
</template>

<script>
export default {
  methods: {
    handleFileChange(event) {
      // 获取用户选择的文件
      const file = event.target.files[0];
      // 创建一个FileReader对象
      const reader = new FileReader();
      // 当文件读取完成后触发的事件处理程序
      reader.onload = () => {
        // 获取文件流
        const base64 = reader.result;
        // 在这里进行base64编码的处理
        console.log(base64);
      };
      // 读取文件流
      reader.readAsDataURL(file);
    },
  },
};
</script>

浅谈 JSON 对象和 FormData 相互转换,打通前端与后端的通信血脉

base64 转文件流

<template>
  <div>
  </div>
</template>

<script>
export default {
  mounted() {
    // Base64字符串;
    let base64String = "data:image/png;base64"
    base64String = this.convertBase64ToBlob(base64String);
    console.log(base64String);
  },
  methods: {
    convertBase64ToBlob(base64String) {
      // 将Base64解码为二进制数据
      const byteCharacters = atob(base64String.split(",")[1]);
      // 创建一个Uint8Array来存储二进制数据
      const byteArrays = new Uint8Array(byteCharacters.length);
      for (let i = 0; i < byteCharacters.length; i++) {
        byteArrays[i] = byteCharacters.charCodeAt(i);
      }
      // 创建Blob对象
      const blob = new Blob([byteArrays], { type: "text/plain" });
      // 将Blob对象转换为File对象
      const file = new File([blob], "filename", { type: "text/plain" });
      return file;
    },
  },
};
</script>

浅谈 JSON 对象和 FormData 相互转换,打通前端与后端的通信血脉

相关推荐

⭐ 深入理解qs库:简化你的工作流程文章来源地址https://www.toymoban.com/news/detail-415115.html

到了这里,关于浅谈 JSON 对象和 FormData 相互转换,打通前端与后端的通信血脉的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Java 解析多层嵌套json数据及json字符串与对象的相互转换

    Java 解析多层嵌套json数据及json字符串与对象的相互转换

    本文主要介绍java解析多层嵌套json数据以及字符串与JSON对象之间的相互转换,包括:json字符串的取值,json对象与字符串的相互转换,字符串转化为java对象,字符串转化为javaList列表等。 提示:以下是本篇文章正文内容,下面案例可供参考 数据格式:JSON实际上就是键值对(

    2024年02月04日
    浏览(15)
  • 【Java alibaba&hutool】JSON、Map、实体对象间的相互转换

    【Java alibaba&hutool】JSON、Map、实体对象间的相互转换

            首先要知道三者的互转关系,可以先将JSON理解成是String类型。这篇博文主要是记录阿里巴巴的JSONObject的两个方法。toJSONString()以及parseObject()方法。顺便巩固Map与实体对象的转换技巧。         综上:这里所学得知识使用fastjson是实现Map -- JSON - Bean。其余由糊涂

    2024年02月07日
    浏览(11)
  • Socket.D v2.3 发布(打通前端与后端)

    基于事件和语义消息流的网络应用层协议。 有用户说,“Socket.D 之于 Socket,尤如 Vue 之于 Js、Mvc 之于 Http”。支持 tcp, udp, ws, kcp 传输。 主要特性 基于事件,每个消息都可事件路由 所谓语义,通过元信息进行语义描述 流关联性,来回相关的消息会串成一个流 语言无关,使用

    2024年02月01日
    浏览(22)
  • Java中的List<T>对象与Json格式的字符串的相互转换

    在这里我随便举一个例子 OK,以上就是互相转换的过程 我使用的场景是在订单的订单列表项这里,涉及到数据库相应字段数据的存放与提取,我的做法是,将List转换为Json格式字符串存入,取时再将Json格式转为List

    2024年02月15日
    浏览(15)
  • 【mybatis-plus实体类复杂对象字段json自动相互转换,以及自定义字段类型解析器】

    引言: mybatis-plus集合对象字段json如何自动进行相互的转换? 怎样在使用mybatis-plus操作数据表的时候自动对实体类属性进行自动解析? 我们平时在做开发的时候,会遇到一个字段保存json串的情况。一般情况下mybatis-plus在做插入/更新之前将对象手动转换成json串,查询要用的时

    2023年04月13日
    浏览(8)
  • 【python】json和字典的相互转换

    【python】json和字典的相互转换

    JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。 Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: 在 json 的编解码过程中,Python 的原始类型与 json 类型会相互转换,具体的转化对照如下: 都是一样的,转换成功~

    2024年02月12日
    浏览(9)
  • Mask图像与json文件相互转换

    做机器学习处理图像时,需要标注图像,其中一种标注是标出图像中的某些区域,生成Mask图像或记录下这些区域的轮廓点坐标。通常,标注直接生成其中一种文件,即只生成json文件或只生成Mask图像。故在此贴出Mask图像与json文件相互转换的Python代码。 mask_to_json json_to_mask 使

    2024年02月15日
    浏览(9)
  • Java实体和JSON之间的相互转换

    Java实体和JSON之间的相互转换

    代码如下: 初始化并输出一下: 注意,如果没有使用“@Data”注解,一定要加上get和set方法,不然转化之后的Json是空的! 主要是对SerializerFeature枚举类的使用,详细的可以看这个博客: https://blog.csdn.net/xiang__liu/article/details/81570923 或者看这里: https://www.javadoc.io/static/com.ali

    2024年02月12日
    浏览(11)
  • python——json、字典的区别及相互转换方法

    python——json、字典的区别及相互转换方法

    json,是一种轻量级的数据交换格式,由JavaScript语言创建,广泛应用于网页数据交互,常见于爬虫和数据分析领域。 json格式简洁、结构清晰,存储格式为:键值对(key:value) 在python中,字典(dict)与json非常相似,都是键值对(key:value)形式。 json与字典的区别,如下表:

    2024年02月08日
    浏览(11)
  • golang学习-golang结构体和Json相互转换

    1、结构体转为json对象     v, _ := json.Marshal(student)     jsonStr := string(v) // 结构体转为json对象 2、json字符串转为结构体     var s1 Student     err := json.Unmarshal([]byte(str), s1) //json 字符串转为结构体    3、结构体标签 表示的是转换为json对象时,ID字段变为id,Name字段变为name. type

    2024年01月23日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包