V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
爱意满满的作品展示区。
9yue

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

  •  
  •   9yue · Jun 26, 2023 · 1769 views
    This topic created in 1037 days ago, the information mentioned may be changed or developed.

    问题来源,作者使用 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

    Supplement 1  ·  Jun 27, 2023

    支持非严格的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;
        }
    }
    
    Supplement 2  ·  Jun 27, 2023

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

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

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

    有两个问题:

    1. 第一行的 b 数组消失了,变成了 2
    2. 第二行的 c 没有解析
    9yue
        8
    9yue  
    OP
       Jul 11, 2023
    @wxf666 谢谢测试,这个可以使用 [其他选项]---->[字段解析] 来解决,定义要解析的 key 及顺序。如:c,b,a 或需要头字段映射可:{c:'字段 C',a:'字段 A',b:'字段 B'} 。 (最新版 修复了 逗号 引起跨列的 bug)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5901 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 02:50 · PVG 10:50 · LAX 19:50 · JFK 22:50
    ♥ Do have faith in what you're doing.