V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Kamitora
V2EX  ›  问与答

请问如何解析一个 Map 和 List 多级嵌套形式的 JSON(十万行左右)?

  •  1
     
  •   Kamitora · 2020-03-02 10:26:31 +08:00 · 2588 次点击
    这是一个创建于 1734 天前的主题,其中的信息可能已经有所发展或是发生改变。

    基本功能:记录每一个层级 key 所对应的 value。

    原始需求:根据 JSON,还原成一个个对应的数据库...

    这种情况是写递归还是说有现成的轮子可以使用?

    谢谢 🙏

    9 条回复    2020-03-02 13:40:25 +08:00
    qyvlik
        1
    qyvlik  
       2020-03-02 10:31:38 +08:00   ❤️ 1
    你使用的编程语言和环境?
    Torpedo
        2
    Torpedo  
       2020-03-02 10:34:56 +08:00   ❤️ 1
    如果预先知道 json 的结构,可以手写个解析器优化下
    Kamitora
        3
    Kamitora  
    OP
       2020-03-02 10:36:12 +08:00
    @qyvlik 还没想好用什么😓,只要能解决这个问题就行...
    tiiis
        4
    tiiis  
       2020-03-02 10:36:42 +08:00   ❤️ 1
    qyvlik
        5
    qyvlik  
       2020-03-02 10:51:47 +08:00   ❤️ 1
    @Kamitora 如果是我的话,用 java,先用 fastjson 解析成 JSON 对象,然后直接按 JSON 对象的结构进行遍历,然后按要求写到 RDS 数据库。
    另外的做法就是,将 这个 JSON 字符串解析好后,分批插入 mongo ( mongo 单个 document 有大小限制,可修改),mongo 有 js、java、go 等语言的开发库。
    Mutoo
        6
    Mutoo  
       2020-03-02 10:56:04 +08:00   ❤️ 1
    stream-json 专门处理大 json,流式处理的过程中正好可以获得各级的 key 和 value
    gwy15
        7
    gwy15  
       2020-03-02 11:14:19 +08:00
    十万行也不大啊,正常做就行,不用特别优化
    lavanil
        8
    lavanil  
       2020-03-02 13:04:41 +08:00
    val path = "examples/src/main/resources/people.json"
    val peopleDF = spark.read.json(path)
    love
        9
    love  
       2020-03-02 13:40:25 +08:00
    10w 不多啊,内存不够加内存。

    当然能改原始输出格式就最好了,这类都要改成单行一个 JSON 文档的风格方便流式处理。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2559 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 04:44 · PVG 12:44 · LAX 20:44 · JFK 23:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.