Json数据 通用提取工具 Web版

news2025/2/22 16:59:00

问题来源

楼主使用Golang 实现了一款通用型 JSON 数据提取工具,支持自动识别 JSON 数据节点并有序提取为 CSV 文件。
看到大家有这样的评论,顺手实现下,~~ 尴尬的是搞完了 ,发现 这个论坛注册不足15天,不能回复评论。晕!~
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>json2csv</title>
    <style type="text/css">
        input {
            width: 60%;
            line-height: 20px;
            text-align: start;
            margin-bottom: 6px;
        }
    </style>
</head>
<body>
<h3>1.数据配置</h3>
<label>字段解析</label><input id="header" value="{fd_code:'股票代码',fd_name:'股票名称'}" placeholder="按需解析字段"/></br>

<label>穿透字段</label><input id="key" value="data.items" placeholder="多层级.隔开, 如 data.items"/></br>
<h3>2.数据导入 </h3>
<h4>2.1 字符串方式 </h4>
<label>字符</label><input id="jsonStr"
                        value='{"data":{"items":[{"fd_code":"XX789","fd_name":"股票名称","yield":"134.2313","sf_type":"1","unit_nav":"1.8080","f_type":"fund"}]}}'/></br>
<button onclick="csvByChar()">下载文件</button>

<h4>2.2 文件方式</h4>
<label>文件</label><input type="file" id="jsonFile" onchange="csvByFile()"/></br>

</body>
<script type="text/javascript">    
    function csvByChar() {
        let data = parseJson(document.getElementById("jsonStr").value);
        downData(data);
    }
    
    function csvByFile() {
        let docObj = document.getElementById("jsonFile");
        console.log(docObj.files[0])
        if (docObj.files && docObj.files[0]) {
            let reader = new FileReader();
            reader.readAsDataURL(docObj.files[0]);//发起异步请求
            reader.onload = function () {
                //读取完成后,数据保存在对象的result属性中
                // console.log(this.result)
                let base64 = this.result.split(",")[1]
                let data = b64_to_utf8(base64);
                // console.log(data)
                downData(parseJson(data));
            }
        }

    }


    function downData(data) {
        //表头
        let header = parseJson(document.getElementById("header").value);
        //数据穿透
        let keys = document.getElementById("key").value.split(".");
        keys.forEach(v => {
            if (data[v] != undefined) {
                data = data[v]
            } else {
                alert("解析失败");
                return;
            }
        });

        data.unshift(header)  // 添加表头至第一行

        // 处理数据为csv的格式
        let csvString = ""
        data.map(item => {
            Object.keys(header).map(key => {
                let value = item[key] || "";
                csvString += value + ','
            })
            csvString += '\r\n'
        })


        // 保存为csv文件并添加下载按钮
        //charset=utf-8,\ufeff + encodeURIComponent解决中文乱码
        csvString = "data:application/csv;charset=utf-8,\ufeff" + encodeURIComponent(csvString)
        const a = document.createElement('a');
        a.style.display = 'none';
        a.href = csvString;
        a.download = "data.csv";
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
    }

    /**
     * 严格的json 格式
     * {"a":"张三","b":1}
     */
    function parseJson(str) {
        try {
            return JSON.parse(str);
        } catch (e) {
            console.error(e);
            return parseJson2(str);
        }
    }

    /**
     * 对象格式
     * {a:"张三",b:1}
     * @param str
     */
    function parseJson2(str) {
        try {
            return new Function('return ' + str)()
        } catch (e) {
            console.error(e);
            alert("解析失败");
            return null;
        }
    }


    function b64_to_utf8(str) {
        return decodeURIComponent(escape(window.atob(str)));
    }


</script>
</html>

如图
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/683984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

迅为RK3568开发板系统编程手册全新升级

iTOP-3568开发板C应用编程手册全新升级&#xff0c;《iTOP-RK3568开发板系统编程手册》旨在帮助刚入门的用户进行入门规划和学习&#xff0c;为系统编程基础指导手册。 第1部分 系统编程初探 第1章 系统编程初探 1.1 什么是系统编程 1.2 系统编程的作用 1.3 系统调用和C语言库函…

R语言使用xlsx包、安装包的经验以及切换工作目录的方法

R语言使用xlsx包 首先不同于读取txt和csv文件&#xff0c;R语言读取xlsx文件需要安装xlsx包 使用下面命令进行安装xlsx install.packages(“xlsx”) 安装过程非常顺利&#xff0c;需要附带安装其它几个包。如果安装出现错误&#xff0c;可以尝试切换网络&#xff0c;使用手机热…

2-css-1

一 CSS 初体验 CSS 定义&#xff1a;层叠样式表 (Cascading Style Sheets&#xff0c;缩写为 CSS&#xff09;&#xff0c;是一种样式表语言&#xff0c;用来描述HTML文档的呈现&#xff08;美化内容&#xff09; CSS 书写在什么位置&#xff1f; title 标签下方哪个标签里面…

2-css-5

一 定位 1 认识 作用&#xff1a;灵活的改变盒子在网页中的位置 实现&#xff1a; 定位模式&#xff1a;position边偏移&#xff1a;设置盒子的位置 left right top bottom 2 相对定位 position: relative 特点&#xff1a; 不脱标&#xff0c;占用自己原来位置显示模式…

如何将JSON对象转化为java对象,如何将java对象转化为JSON对象

如何将JSON对象转化为java对象&#xff0c;如何将java对象转化为JSON对象 一、在java中如何构建一个JSON对象 在java中我们可以通过创建JsonObject对象的方式来为其添加相应的参数属性&#xff0c;进而构造JSON对象 1、导入JsonObject的依赖 JsonObject是Gson库中的一个类&…

数据结构--数据结构的基本概念

数据结构–数据结构的基本概念 知识总览&#xff1a; 数据结构的三要素 #mermaid-svg-jflLhauniFK26Yxb {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jflLhauniFK26Yxb .error-icon{fill:#552222;}#mermaid-svg-…

软件测试已经人员饱和了?是否选择退出这个行业?

铺天盖地的职场内卷文章充斥我们眼球&#xff0c;给大家带来山大压力&#xff0c;内心焦虑。据闻&#xff0c;2023年有1070万高校应届毕业生涌入用人市场&#xff0c;其中有多少人将卷入软件测试行业呢&#xff1f;而最近大厂毕业之风盛行&#xff0c;对外输出人才&#xff0c;…

从小白到大神之路之学习运维第46天---第三阶段----Ceph分布式存储系统(CentOS7.9版本下安装部署ceph)

第三阶段基础 时 间&#xff1a;2023年6月25日 参加人&#xff1a;全班人员 内 容&#xff1a; Ceph分布式存储系统 目录 一、Ceph概述 二、Ceph 的工作原理和工作流程 三、Ceph 组件包括 1. RADOS 2. OSD 3. MON 4. MDS 5. RGW 6. RBD 7. CephFS 四、安装部…

文心一言 VS 讯飞星火 VS chatgpt (47)-- 算法导论6.1 5题

五、一个已排好序的数组是一个最小堆吗? 文心一言&#xff1a; 一个已排好序的数组不一定是一个最小堆。最小堆是一种特殊的二叉树&#xff0c;它满足以下性质&#xff1a;对于任意节点 x&#xff0c;其父节点 y 的值都小于等于 x 的值。而一个已排好序的数组只是一个有序数…

【FFmpeg实战】压缩数据AVPacket解析

因为FFmpeg更新的比较快&#xff0c;API也会跟着有所变动&#xff0c;所以声明一下&#xff0c;本文使用的FFmpeg版本为V3.3.5。 1.AVPacket简介 AVPacket是FFmpeg中很重要的一个数据结构&#xff0c;它保存了解复用&#xff08;demuxer)之后&#xff0c;解码&#xff08;dec…

TS格式视频的使用

什么是TS文件格式 TS&#xff08;Transport Stream&#xff0c;传输流&#xff09;是一种封装的格式&#xff0c;它的全称为MPEG2-TS。MPEG2-TS是一种标准数据容器格式&#xff0c;传输与存储音视频、节目与系统信息协议数据&#xff0c;主要应用于数字广播系统&#xff0c;例…

在加密数据时,如何选择合适的算法?

我们将分解两种主要类型的加密 - 对称和非对称 - 然后深入研究 5 种最常用的加密算法列表&#xff0c;以前所未有的方式简化它们 加密经常被指责为政治实体隐藏恐怖活动&#xff0c;是始终成为头条新闻的网络安全话题之一。任何对不同类型的加密有充分了解的人都可能会觉得对这…

内网穿透工具cpolar——将内网站点发布至公网、远程连接公司内网电脑

在现代互联的时代&#xff0c;我们经常需要将局域网中的服务器或提供给外部网络进行访问。然而&#xff0c;由于内网通常使用私有IP地址&#xff0c;在没有合适的配置和设置的情况下&#xff0c;对外部网络是不可见的。这就引出了内网穿透技术&#xff0c;它允许我们在不暴露真…

从三个角度分析B端产品帮助中心的发展趋势和创新思路

随着企业级&#xff08;B端&#xff09;产品在市场上的快速增长&#xff0c;优秀的帮助中心对于提升用户体验和满意度变得尤为重要。本文将从三个维度讨论B端产品帮助中心的发展趋势和创新思路&#xff0c;以帮助企业构建更优秀的帮助体系。 个性化化的帮助体验 在B端产品帮助…

基于瑞芯微camera学习原创文章汇总pdf分享给大家

前面一段时间基于瑞芯微3568平台编写了camera系列文章&#xff0c; 一共12篇&#xff0c;目前更新完毕。 《瑞芯微文章合集》 camera系列文章编写前后一共花费2个月时间&#xff0c; 期间查阅了很多资料&#xff0c;做了很多实验&#xff0c; 根据自己的理解&#xff0c; …

实训笔记6.25

实训笔记6.25 6.25一、座右铭二、知识回顾2.1 JavaSE2.1.1 基本语法2.1.2 数组2.1.3 JVM内存2.1.4 面向对象2.1.5 Java常用类2.1.6 Java异常机制2.1.7 Java泛型2.1.8 Java集合2.1.9 JavaIO流2.1.10 Java注解2.1.11 Java反射机制2.1.12 Java多线程2.1.13 Java网络编程 三、Java多…

利用SpringBoot和javafx进行桌面开发

原文合集地址如下&#xff0c;有需要的朋友可以关注 本文地址 合集地址 众所周知&#xff0c;SpringBoot是一款强大的Javaweb开发程序&#xff0c;这得益于其构造了一个Spring容器&#xff0c;然后通过依赖注入和控制反转&#xff0c;维护起一套Java对象和实例的管理机制&…

Chatgpt三大新功能曝光:记住你是谁/文件上传/切换工作区

今日&#xff0c;一张神秘的截图&#xff0c;曝光了chatgpt还没发布的三个新功能&#xff1a; 除截图外&#xff0c;其对应的源代码也被扒了出来&#xff0c;甚至还有人为此建立了GitHub仓库&#xff0c;以此来追踪代码的变化情况。 根据观察&#xff0c;相关部分代码正在更新…

制作看大片一样的推拉镜头效果,刚一个月AI绘图神器 Midjourney 又又更新了

5.1 版本刚更新一个月&#xff0c;官方又宣布 5.2 版本更新了&#xff1a;改进的美观性、连贯性、更好的文本理解、更清晰的图像、更高的变化模式、缩小绘画&#xff0c;以及用于分析提示符号的新命令 /short 命令‍‍‍‍‍‍‍‍‍ 视觉效果最神奇的功能要数 “Zoom Out” 缩…

使用Rabbitmq死信队列解锁库存

一、库存解锁的场景 RabbitMQ库存解锁的场景有很多&#xff0c;以下是一些常见的场景&#xff1a; 订单取消和订单回滚。下订单成功&#xff0c;订单过期没有支付被系统自动取消、被用户手动取消。都要解锁库存。 下订单成功&#xff0c;库存锁定成功&#xff0c;接下来的业务…