V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
9yue
V2EX  ›  分享创造

Json 数据通用提取工具,使用 HTML JavaScript [单文件离线版]

  •  
  •   9yue · 2023-06-26 15:10:21 +08:00 · 1139 次点击
    这是一个创建于 519 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题来源,作者使用 Golang 实现的一款通用型 JSON 数据提取工具,支持自动识别 JSON 数据节点并有序提取为 CSV 文件。

    看到评论回复说 html 单文件,自带 UI....

    功能已实现,界面缺少美化,但小巧,分析给需要的朋友

    Gitee 链接

    Json2Csv 使用简介

    1. 数据路径:设置 Json 中数据所处路径,如'root.topics.data' 'data.items' ...

    2. 字段解析:为空则为全量解析,自动识别字段头。可自定义 排序、映射、按需导出 csv 文件。

      • 假设数据
        • [{"id":1,"name":"张三","age":19},{"id":2,"name":"李四","age":20}]
      • 按需排序 字段名逗号隔开(支持,隔开的字符串 /数组格式)
        • name,id,age / ["age","name","id"]
      • 字段映射 csv 头 排序+按需导出 ,移除 id 列
        • {name:"名字",age:'年龄'}
    3. 添加 csv 头:选择框 csv 第一行是否包含字段信息。

    支持以下常见 JSON 数据格式:

    1.任意多级节点下的数组数据

    {"data":{"items":[{"title":"one","price":23},{"title":"two","price":92},{"title":"three","price":5623}]}}
    

    2.兼容处理数据区域非数组结构而是一个对象的情况

    {"data":{"items":{"1":{"title":"one","name":"test1"},"2":{"title":"two","name":"test2"},"3":{"title":"three","name":"test3"}}}}
    

    数据位于"data.items"多级节点下,则填写 [数据路径] ,如data.items

    本地测试,秒级处理 20M json 文件,Chrome 版本 114.0.5735.134

    第 1 条附言  ·  2023-06-27 10:03:34 +08:00

    支持非严格的JSON数据,字段名可 不加双引号 ""

    使用JS 动态创建函数,会遇到和 eval() 类似的的安全问题和(相对较小的)性能问题。与 eval() 不同的是,Function 构造函数创建的函数只能在全局作用域中运行。 MDN Function介绍

    1.{title: "two", 'price': 92}
    2.{data: {items: [{title: "one",price: 23},{title: "two", 'price': 92}]}}
    
    /**
     * 使用动态函数实现
     * @param str
     * @returns {null|*}
     */
    function parseJson2(str) {
        try {
            return new Function('"use strict"; return '+str)();
        } catch (e) {
            console.warn("解析处理失败", e);
            return null;
        }
    }
    
    第 2 条附言  ·  2023-06-27 18:06:51 +08:00

    支持多个 api地址发起Ajax get请求处理数据。(注:跨域请求需关闭 浏览器同源策略)

    8 条回复    2023-07-11 10:48:51 +08:00
    faketemp
        1
    faketemp  
       2023-06-26 19:40:51 +08:00 via iPhone
    继续 不要停 卷起来 brosヾノ≧∀≦)o
    9yue
        2
    9yue  
    OP
       2023-06-27 10:11:28 +08:00
    @faketemp 原本打算仅回帖,响应有需要的哥们,但是刚进组织不足 15 天,不允许回复,试了下可以发帖, 晕~~
    haoxuexiaoyao
        3
    haoxuexiaoyao  
       2023-06-27 11:39:23 +08:00
    有没有循环网页 json 链接转换的方式
    9yue
        4
    9yue  
    OP
       2023-06-27 14:29:00 +08:00
    @haoxuexiaoyao 会 html js 的话,通过 ajax 请求 连接,拿到 json 数据,使用此工具的 JS 方法 很简单就可以实现此功能。
    haoxuexiaoyao
        5
    haoxuexiaoyao  
       2023-06-27 15:33:55 +08:00
    有没有 python 里面这样类似好用的 哈哈 经常用 python 处理 有的挺麻烦处理
    9yue
        6
    9yue  
    OP
       2023-06-27 15:58:45 +08:00
    @haoxuexiaoyao 我可以稍后在这上面 加上你说的功能。python 处理这种数据,能自己会编码 也是 so easy, 不然就看 能否 找到现成的轮子。
    wxf666
        7
    wxf666  
       2023-07-06 21:54:34 +08:00
    这个 json 转换不对呀:

    ```json
    [{"a": 1, "b": [2, 3, 4]}, {"a": 5, "c": 6}]
    ```

    有两个问题:

    1. 第一行的 b 数组消失了,变成了 2
    2. 第二行的 c 没有解析
    9yue
        8
    9yue  
    OP
       2023-07-11 10:48:51 +08:00
    @wxf666 谢谢测试,这个可以使用 [其他选项]---->[字段解析] 来解决,定义要解析的 key 及顺序。如:c,b,a 或需要头字段映射可:{c:'字段 C',a:'字段 A',b:'字段 B'} 。 (最新版 修复了 逗号 引起跨列的 bug)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5794 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 06:32 · PVG 14:32 · LAX 22:32 · JFK 01:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.