首页 > 解决方案 > 如何将多个表格从 Excel 转换为 JSON

问题描述

我在 Excel 中有 2 个表。

第一个包含公司信息:

标题 会员_否 Auth_Capital 电子邮件
科威特能源公司 KSCC 100018 127000000 127000000
塞勒姆国际广告公司 100021 10000
电源触摸发电机。贸易。&继续。一氧化碳 100026 500000

第二个表包含用户和关联公司的信息:

姓名 角色 国籍 会员_否
منصور احمد محمد بوخمسين 董事会主席 科威特 100018
محمد عادل التميمي 副主席兼首席执行官 加拿大 100018
萨勒姆·M·阿杰米 Doc的授权合作伙伴。 科威特 100021
ريم محمد سالم الحريص 伙伴 科威特 100026
喜欢 特别授权书 科威特 100026
胡歌 特别授权书 科威特 100026

但是,我想将其转换为 JSON。

这是我想要的 JSON 文件的结果:

[{"information": {"title": " KUWAIT ENERGY CO. KSCC", "Member_No": " 100018", "Auth_Capital":" 127000000",  "Email": " mansour.aboukhamseen@koc.com.kw"}, "users": [{"name": "منصور احمد محمد بوخمسين", "role": "  Chairman of the board of Directors", "nationality": " KUWAIT"},{"name": "محمد عادل التميمي", "role": "  Vice Chairman and Cheif Executive", "nationality": " CANADA"}]},
{"information":{"title": " SALEM INTERNATIONAL ADVERTISING CO.", "Member_No": " 100021",   "Auth_Capital": " 10000",     "Email": null},  "users": [{"name": "SALEM M. AL-AJMI", "role": "  Authorized partner with Doc.", "nationality": " KUWAIT"}]},
{"information":{"title": " POWER TOUCH GEN. TRAD. & CONT. CO.", "Member_No": " 100026",   "Auth_Capital": " 500000",     "Email": null},  "users": [{"name": "ريم محمد سالم الحريص", "role": "  Partner", "nationality": " KUWAIT"},{"name": "محمد 0 0", "role": "  Special Power of Attorney", "nationality": " KUWAIT"}, {"name": "سالم 0 0", "role": "  Special Power of Attorney", "nationality": " KUWAIT"}]}]

我编写了以下代码,可以将一个 Excel 表格转换为 JSON 文件。

import excel2json

excel2json.convert_from_file('Conpanies.xlsx')

标签: pythonjsonexcel

解决方案


你可以使用熊猫。
首先导入您的excel文件。to_dict您可以使用和 参数轻松地将它们转换为字典orient="records"
最后构建您的 dict 列表以从中生成 json:

import pandas as pd
import json

df_c = pd.read_excel("companies.xlsx")
df_u = pd.read_excel("users.xlsx")

data = []
comp_list = df_c.to_dict(orient="records")

for comp in comp_list:
    users = df_u[df_u["Member_No"]==comp["Member_No"]].to_dict(orient="records")
    data.append({"information": comp, "users":users})

print(json.dumps(data, indent=4, ensure_ascii=False))

ensure_ascii=False使 json 中的阿拉伯字符可读(打开 json 时注意编码):

[
    {
        "information": {
            "title": "KUWAIT ENERGY CO. KSCC",
            "Member_No": 100018,
            "Auth_Capital": 127000000,
            "Email": "foo@bar.com"
        },
        "users": [
            {
                "name": "منصور احمد محمد بوخمسين",
                "role": "Chairman of the board of Directors",
                "nationality": "KUWAIT",
                "Member_No": 100018
            },
            {
                "name": "محمد عادل التميمي",
                "role": "Vice Chairman and Cheif Executive",
                "nationality": "CANADA",
                "Member_No": 100018
            }
        ]
    },
    {
        "information": {
            "title": "SALEM INTERNATIONAL ADVERTISING CO.",
            "Member_No": 100021,
            "Auth_Capital": 10000,
            "Email": NaN
        },
        "users": [
            {
                "name": "SALEM M. AL-AJMI",
                "role": "Authorized partner with Doc.",
                "nationality": "KUWAIT",
                "Member_No": 100021
            }
        ]
    },
    {
        "information": {
            "title": "POWER TOUCH GEN. TRAD. & CONT. CO.",
            "Member_No": 100026,
            "Auth_Capital": 500000,
            "Email": NaN
        },
        "users": [
            {
                "name": "ريم محمد سالم الحريص",
                "role": "Partner",
                "nationality": "KUWAIT",
                "Member_No": 100026
            },
            {
                "name": "محمد",
                "role": "Special Power of Attorney",
                "nationality": "KUWAIT",
                "Member_No": 100026
            },
            {
                "name": "سالم",
                "role": "Special Power of Attorney",
                "nationality": "KUWAIT",
                "Member_No": 100026
            }
        ]
    }
]

推荐阅读