首页 > 其他分享 >json数据四大加载方式

json数据四大加载方式

时间:2024-11-22 12:45:03浏览次数:3  
标签:console JSON item json 四大 data 加载

效果:

一、使用 import 静态加载 JSON

原理
  1. 使用 ES 模块的 import 语法直接引入 JSON 文件。
  2. Webpack/Vite 等构建工具会将 JSON 文件解析成 JavaScript 对象。
优点
  1. 简单直接,适合静态数据
  2. 不需要额外的网络请求
  3. 数据会随着打包文件一起部署。
缺点
  • JSON 文件只能是静态的,构建后无法动态更新。
使用场景
  • 配置文件或不需要动态更新的数据。
// 静态加载 JSON 文件之将 random_data.json 文件放在项目的 src 目录下
import jsonData from '@/views/json/random_data.json';
 const loadJSON = () => {
     console.log('Parsed JSON data2:', data); // 打印解析后的 JSON 数据
 }

onMounted(() => {
  // 调用函数来加载JSON文件
  loadJSON();
});

二、使用 fetch 动态加载 JSON

原理
  • 使用浏览器的 fetch API,通过 HTTP 请求动态加载 JSON 文件。
优点
  1. 支持动态更新,适合加载频繁变化的数据。
  2. 文件不需要打包,直接部署即可。
缺点
  1. 需要网络支持
  2. 相比 import,增加了网络延迟。
使用场景
  • 加载动态数据或外部接口返回的 JSON 文件。
// public\json\random_data.json 将 random_data.json 文件移动到 public 文件夹中
const loadJSON = () => {
  fetch('/json/random_data.json') // 请求 public 文件夹中的 JSON 文件
    .then(response => {
      if (!response.ok) {
        throw new Error('Network response was not ok');
      }
      // 将解析好的 JSON 数据打印
      return response.json(); // 将响应解析为 JSON
    })
    .then(data => {
      console.log('Parsed JSON data2:', data); // 打印解析后的 JSON 数据
      data.forEach(item => {
        console.log(item.name, item.score, item.time);
      });
    })
    .catch(error => {
      console.error('Error loading JSON:', error);
    });
};

onMounted(() => {
  // 调用函数来加载JSON文件
  loadJSON();
});

三、使用 AJAX 动态加载 JSON

原理
  • 使用传统的 AJAX 技术(如 XMLHttpRequest 或工具库如 Axios)加载 JSON 数据。
优点
  1. 支持复杂的请求配置(如自定义头部)。
  2. 支持跨域请求(结合 CORS 配置)。
缺点
  1. 代码复杂度稍高(相比 fetch)。
  2. 需要引入额外的库(如 Axios)。
使用场景
  • 项目中需要多种网络请求(GET、POST 等),以及对请求配置有需求时。
//加载代码(原生 XMLHttpRequest)
const xhr = new XMLHttpRequest();
xhr.open('GET', '/data/random_data.json', true); // 请求路径指向 public 文件夹
xhr.onload = () => {
  if (xhr.status === 200) {
    const data = JSON.parse(xhr.responseText); // 将响应文本解析为 JSON
    console.log('Parsed JSON data2:', data); // 打印解析后的 JSON 数据
    data.forEach(item => {
      console.log(item.name, item.score, item.time);
    });
  }
};
xhr.send();
//加载代码(使用 Axios)
import axios from 'axios';

axios.get('/data/random_data.json') // 请求 public 文件夹中的 JSON 文件
  .then(response => {
    const data = response.data;
     console.log('Parsed JSON data2:', data); // 打印解析后的 JSON 数据
     data.forEach(item => {
      console.log(item.name, item.score, item.time);
    });
  })
  .catch(error => {
    console.error('Error loading JSON:', error);
  });

四、通过 Node.js fs 模块加载

原理
  • 在 Node.js 环境下,使用 fs 模块直接读取本地 JSON 文件。
优点
  1. 直接读取文件,无需通过网络请求
  2. 适合在后端使用。
缺点
  • 只能在 Node.js 环境下运行,无法在前端使用。
使用场景
  • 在服务器端读取配置文件或其他静态数据。
//此方法适用于 Node.js 环境。确保 JSON 文件路径相对于脚本是正确的。
const fs = require('fs');

fs.readFile('./data/random_data.json', 'utf8', (err, data) => {
  if (err) {
    console.error('Error reading JSON:', err);
    return;
  }
  const jsonData = JSON.parse(data); // 解析 JSON 内容
  console.log('Parsed JSON data2:', jsonData ); // 打印解析后的 JSON 数据
  jsonData.forEach(item => {
    console.log(item.name, item.score, item.time);
  });
});

五、总结

方式优点缺点使用场景
Import简单直接,数据随打包文件发布只能加载静态数据静态数据,JSON 内容固定,不需要动态更新
Fetch支持动态更新,异步加载依赖网络,请求时间较慢浏览器环境,动态加载 JSON 文件或外部接口
AJAX支持复杂请求配置代码复杂度稍高需要复杂请求(如 POST)或用工具库时
Node.js无需网络,直接读取文件仅限于服务器端服务器端场景,后端读取 JSON 文件,如配置或数据库数据

标签:console,JSON,item,json,四大,data,加载
From: https://blog.csdn.net/m0_72030584/article/details/143968424

相关文章

  • MySQL · 最佳实践 · 如何索引JSON字段
    目录标题概述示例数据增加虚拟字段在虚拟字段上加索引小结概述MySQL从5.7.8起开始支持JSON字段,这极大的丰富了MySQL的数据类型。也方便了广大开发人员。但MySQL并没有提供对JSON对象中的字段进行索引的功能,至少没有直接对其字段进行索引的方法。本文将介绍利用MySQL......
  • 数据传输序列化 Json和protobuf
    1序列化序列化(Serialization)将对象的状态信息转换为可以存储或传输的形式的过程,与之相对应的过程称之为反序列化(Unserialization)。序列化和反序列化主要用于解决在跨平台和跨语言的情况下,模块之间的交互和调用,但其本质是为了解决数据传输问题。 1.1如何实现序列化......
  • vxe-table 集成 echarts 实现单元格图表功能,柱状图、饼图、折线图、右键菜单加载表格
    实现表格通过右键菜单渲染折线图、饼图、柱状图等<template><div><vxe-gridv-bind="gridOptions"@menu-click="menuClickEvent"></vxe-grid></div></template><script>exportdefault{data(......
  • 图片渐进式加载优化实践指南
    前言Hey,我是Immerse文章首发于个人博客【https://yaolifeng.com】,更多内容请关注个人博客转载说明:转载请在文章头部注明原文出处及版权声明!起因最近上线了个人博客,片段页面存在大量图片,在图片加载方面体验很差,可以说是断崖式,从0-1完全没有任何过渡(这很影响页面布局和......
  • 三圆点CSS3 loading加载动画特效库
     在线预览       插件下载 安装可以通过npm来安装three-dots.css。npminstallthree-dots--save 使用方法在页面中引入three-dots.css。<linkhref="css/three-dots.css"rel="stylesheet"> HTML结构然后在你需要添......
  • Qt/C++离线地图的加载和交互/可以离线使用/百度和天地图离线/支持手机上运行
    一、前言说明在地图应用中,有很多时候是需要断网环境中离线使用的,一般会采用两种做法,一种是只下载好离线瓦片地图,然后根据不同的缩放和经纬度坐标绘制瓦片。这种方式优点是任何地图都支持,只需要拿到瓦片即可,缺点是其他的接口都需要自己处理,比如覆盖物的绘制,工作量巨大,尽管Qt的qml......
  • python: Serialize and Deserialize complex JSON using jsonpickle
     #encoding:utf-8#版权所有2024©涂聚文有限公司#许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎#SerializeandDeserializecomplexJSONinPython#描述:pipinstalljsonpicklehttps://github.com/jsonpickle/jsonpickle#Author:geovindu,......
  • Jupyter Latex+VScode json配置
    {//何时构建LaTeX项目onFileChange:文件更改时编译文件onSave:保存代码时自动编译文件never:从不自动编译)"latex-workshop.latex.autoBuild.run":"never",//显示上下文菜单"latex-workshop.showContextMenu":true,//启用智能感知功能包功能"l......
  • Java中类加载过程详解
    类的生命周期类从被加载到虚拟机内存中开始到卸载出内存为止,它的整个生命周期可以简单概括为7个阶段:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)。其中,验证、准备和解析这三个阶段可以统称为连接(Link......
  • C#支持将json中的多种类型反序列化为object类型
    我们知道json中的字段是弱类型的,也就是说json中的一个字段不用事先声明具体的类型,这就导致json中某个字段的值有可能是字符串,也有可能是数字,也有可能是布尔值,其它等。。。但是C#是强类型的,定义一个C#类中字段的时候,必须声明它是什么类型,所以我们可以将json中有不同类型的字段在C#......