将嵌套的Json转换为多个Csv文件

rm5edbpk  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(98)

我有一个json pull使用API,下面是文件的样子:

[
    {
        "id": 181,
        "emp_number": "527",
        "clock_id": "124",
        "organization_trackings": [
            {
                "title": "Division",
                "value": "200",
                "value_description": "Cons"
            },
            {
                "title": "Location",
                "value": "951",
                "value_description": "Jasp"
            },
            {
                "title": "Special",
                "value": "20",
                "value_description": "Remote"
            },
            {
                "title": "Primary Department",
                "value": "200",
                "value_description": "DPT1"
            },
            {
                "title": "Secondary Department",
                "value": "2000",
                "value_description": "DH"
            },
            {
                "title": "Function",
                "value": "0000",
                "value_description": "Resource"
            }
        ]
    },
    {
        "id": 181837,
        "emp_number": "649",
        "timeclock_id": "528",
        "organization_trackings": [
            {
                "title": "Division",
                "value": "200",
                "value_description": "Consultant"
            },
            {
                "title": "Location",
                "value": "001",
                "value_description": "Atlanta"
            },
            {
                "title": "Function",
                "value": "0000",
                "value_description": "Resource"
            }
        ]
    }
]

我需要把这个转换成2csv文件

first csv fileis:  
id  emp_number  clock_id
181 527 124
181837  649 528

第二个csv文件:

emp_number,title,value,value_description
527,Location,951,Jasp
527,Special,20,Remote
527,Primary Department,200,DPT1
527,Secondary Department,2000,DH
527,Function,0,Resource
649,Division,200,Consultant
649,Location,1,Atlanta
649,Function,0,Resource

我是python新手,有人能指导我如何在python中做吗?

z9zf31ra

z9zf31ra1#

我猜关键字"timeclock_id": "528"是一个错字,应该是"clock_id": "528"
试试看:

import json

with open("your_data.json", "r") as f_in:
    data = json.load(f_in)

df1 = pd.DataFrame(data)
df2 = pd.DataFrame(
    [
        {"emp_number": d["emp_number"], **dd}
        for d in data
        for dd in d["organization_trackings"]
    ]
)

df1.pop("organization_trackings")

print(df1)
print()
print(df2)

# df1.to_csv('df1.csv', index=False)
# df2.to_csv('df2.csv', index=False)

图纸:

id emp_number clock_id
0     181        527      124
1  181837        649      528

  emp_number                 title value value_description
0        527              Division   200              Cons
1        527              Location   951              Jasp
2        527               Special    20            Remote
3        527    Primary Department   200              DPT1
4        527  Secondary Department  2000                DH
5        527              Function  0000          Resource
6        649              Division   200        Consultant
7        649              Location   001           Atlanta
8        649              Function  0000          Resource
i1icjdpr

i1icjdpr2#

这检查clock_id,并且如果失败则检查timeclock_id
工作样品:https://onlinegdb.com/WaR32RLl2

from io import StringIO
import csv, json

json_file = """\
[ { "id": 181, "emp_number": "527", "clock_id": "124", "organization_trackings": [ { "title": "Division", "value": "200", "value_description": "Cons" }, { "title": "Location", "value": "951", "value_description": "Jasp" }, { "title": "Special", "value": "20", "value_description": "Remote" }, { "title": "Primary Department", "value": "200", "value_description": "DPT1" }, { "title": "Secondary Department", "value": "2000", "value_description": "DH" }, { "title": "Function", "value": "0000", "value_description": "Resource" } ] }, { "id": 181837, "emp_number": "649", "timeclock_id": "528", "organization_trackings": [ { "title": "Division", "value": "200", "value_description": "Consultant" }, { "title": "Location", "value": "001", "value_description": "Atlanta" }, { "title": "Function", "value": "0000", "value_description": "Resource" } ] } ]
"""

with (
    StringIO(json_file) as file,  # replace with open(FILE_PATH, 'r')
    open('csv_file1.csv', 'w', newline='') as f1,
    open('csv_file2.csv', 'w', newline='') as f2):
    data = json.load(file)
    w1, w2 = csv.writer(f1), csv.writer(f2)
    w1.writerow(['id', 'emp_number', 'clock_id'])
    w2.writerow(['emp_number', 'title', 'value', 'value_description'])
    for i in data:
        _id, emp_number, clock_id = i.get('id'), i.get('emp_number'), i.get('clock_id', i.get('timeclock_id'))
        orgs = [[emp_number] + list(j.values()) for j in i['organization_trackings']]
        w1.writerow([_id, emp_number, clock_id])
        w2.writerows(orgs)

相关问题