Vue项目里实现json对象转formData数据

平常调用后端接口传参都是json对象,当提交表单遇到有附件需要传递时,通常是把附件上传单独做个接口,也有遇到后端让提交接口一并把附件传递到后端,这种情况需要把参数转成formData的数据,需要用到new FormData()。json对象转formData,一个一个的赋值代码会非常冗余,并且遇到复杂的数据结构,还需要一层一层的往下循环赋值。因此写了一个demo解决当前问题以供参考,写的不好的地方欢迎指正。

<template>
  <div>
    测试页面
    <el-button type="primary" size="small" @click="changeHandle"
      >json对象转formData</el-button
    >
  </div>
</template>

<script>
export default {
  name: "test",
  data() {
    return {};
  },
  methods: {
    changeHandle() {
      let obj = {
        name: "yongqiang.chen",
        age: 30,
        likes: ["足球", "篮球", "乒乓球"],
        work: {
          address: "软件园C5",
          floor: 7,
          isWork: true,
          computer: {
            color: "black",
            num: 8,
            size: 1024,
          },
        },
        deepArray: [
          [
            { name: "张三", age: 25, likes: ["七星彩", "大乐透", "双色球"] },
            { name: "李四", age: 26, likes: ["轿车", "摩托车", "自行车"] },
          ],
          [
            { title: "隐形的翅膀", singer: "张韶涵" },
            { title: "2002年的第一场雪", singer: "刀郎" },
          ],
        ],
      };
      let formDatas = new FormData();
      this.makeFormData(obj, formDatas);
      for (let [name, value] of formDatas) {
        console.log(`${name} = ${value}`);
      }
    },
    makeFormData(obj, form_data) {
      var data = [];
      if (obj instanceof File) {
        data.push({ key: "", value: obj });
      } else if (obj instanceof Array) {
        for (var j = 0, len = obj.length; j < len; j++) {
          var arr = this.makeFormData(obj[j]);
          for (var k = 0, l = arr.length; k < l; k++) {
            var key = !!form_data ? j + arr[k].key : "[" + j + "]" + arr[k].key;
            data.push({ key: key, value: arr[k].value });
          }
        }
      } else if (typeof obj == "object") {
        for (var j in obj) {
          var arr = this.makeFormData(obj[j]);
          for (var k = 0, l = arr.length; k < l; k++) {
            var key = !!form_data ? j + arr[k].key : "." + j + "" + arr[k].key;
            data.push({ key: key, value: arr[k].value });
          }
        }
      } else {
        data.push({ key: "", value: obj });
      }
      if (!!form_data) {
        // 封装
        for (var i = 0, len = data.length; i < len; i++) {
          form_data.append(data[i].key, data[i].value);
        }
        return form_data;
      } else {
        return data;
      }
    },
  },
};
</script>

<style>
</style>

相关推荐

  1. Vue项目实现json对象formData数据

    2024-01-10 23:02:02       58 阅读
  2. FormData 对象

    2024-01-10 23:02:02       28 阅读
  3. vue exceljs json数据excel

    2024-01-10 23:02:02       54 阅读
  4. Vue 接口用FormData() 提交数据

    2024-01-10 23:02:02       29 阅读
  5. js实现字符串json对象的四种方法

    2024-01-10 23:02:02       37 阅读
  6. vue 菜鸟教学如何jason字符串对象

    2024-01-10 23:02:02       39 阅读
  7. 对象json,由于数据量过大压缩成.json.zip格式

    2024-01-10 23:02:02       54 阅读
  8. json字符串json对象三种方式

    2024-01-10 23:02:02       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-10 23:02:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-10 23:02:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-10 23:02:02       87 阅读
  4. Python语言-面向对象

    2024-01-10 23:02:02       96 阅读

热门阅读

  1. 镜头选型和计算

    2024-01-10 23:02:02       64 阅读
  2. Linux read命令详解

    2024-01-10 23:02:02       50 阅读
  3. 题记(9)--简单密码

    2024-01-10 23:02:02       35 阅读
  4. K8S集群调度(2)

    2024-01-10 23:02:02       59 阅读
  5. C++常见错误(汇总版1)

    2024-01-10 23:02:02       48 阅读
  6. Docker:docker exec命令简介

    2024-01-10 23:02:02       56 阅读
  7. 【docker】常用指令整理

    2024-01-10 23:02:02       44 阅读
  8. 题记(10)--大数加法

    2024-01-10 23:02:02       52 阅读
  9. Spring知识归整,速看速记!

    2024-01-10 23:02:02       46 阅读