代码之家  ›  专栏  ›  技术社区  ›  mleafer

合并多个JSON文件,并解析为CSV

  •  0
  • mleafer  · 技术社区  · 5 年前

    我有大约100个JSON文件,所有文件的标题都是不同的日期,我需要将它们合并成一个CSV文件,标题是“日期”、“真实姓名”、“文本”。

    JSON本身没有列出日期,并且真实的名称是嵌套的。我已经有一段时间没有使用JSON了,有点不知所措。

    JSON的基本结构大致如下:

    文件名:2021-01-18。json

    [
        {
            "client_msg_id": "xxxx",
            "type": "message",
            "text": "THIS IS THE TEXT I WANT TO PULL",
            "user": "XXX",
            "user_profile": {
                "first_name": "XXX",
                "real_name": "THIS IS THE NAME I WANT TO PULL",
                "display_name": "XXX",
                "is_restricted": false,
                "is_ultra_restricted": false
            },
            "blocks": [
                {
                    "type": "rich_text",
                    "block_id": "yf=A9",
                }
            ]
        }
    ]
    

    到目前为止我有

    import glob 
    read_files = glob.glob("*.json")
    output_list = []
    all_items = []
    
    for f in read_files:
        with open(f, "rb") as infile:
            output_list.append(json.load(infile))
        data = {}
        for obj in output_list[]
            data['date'] = f
            data['text'] = 'text'
            data['real_name'] = 'real_name'
            all_items.append(data)
    
    0 回复  |  直到 5 年前
        1
  •  0
  •   Mark Tolonen    5 年前

    读取JSON对象后,只需将数据索引到字典中即可。你可能需要 obj[0]['text'] 等等,如果你的JSON数据真的在每个文件的列表中,但这似乎很奇怪,我假设你的数据是从 output_list 在你收集数据之后。因此,假设您的文件内容如下所示:

    {
        "client_msg_id": "xxxx",
        "type": "message",
        "text": "THIS IS THE TEXT I WANT TO PULL",
        "user": "XXX",
        "user_profile": {
            "first_name": "XXX",
            "real_name": "THIS IS THE NAME I WANT TO PULL",
            "display_name": "XXX",
            "is_restricted": false,
            "is_ultra_restricted": false
        },
        "blocks": [
            {
                "type": "rich_text",
                "block_id": "yf=A9",
            }
        ]
    }
    

    测验py:

    import json
    import glob 
    from pathlib import Path
    
    read_files = glob.glob("*.json")
    output_list = []
    all_items = []
    for f in read_files:
        with open(f, "rb") as infile:
            output_list.append(json.load(infile))
        data = {}
        for obj in output_list:
            data['date'] = Path(f).stem
            data['text'] = obj['text']
            data['real_name'] = obj['user_profile']['real_name']
            all_items.append(data)
    print(all_items)
    

    输出:

    [{'date': '2021-01-18', 'text': 'THIS IS THE TEXT I WANT TO PULL', 'real_name': 'THIS IS THE NAME I WANT TO PULL'}]