【发布时间】:2021-09-17 17:42:22
【问题描述】:
我是 python 新手,需要帮助将嵌套的 json 文件转换为 csv。 文件名:users.json 文件路径:C:/_apps/test
文件内容:
{
"count": 3,
"next": null,
"previous": null,
"results": [
{
"user": "@{id=1111; email=pqr@abc.com; first_name=Ann; last_name=pqr}",
"active": true,
"marketing_optin": null,
"enrolled_at": "2018-05-08T18:22:15.125868Z",
"expires_at": null,
"access_code": null
},
{
"user": "@{id=2222; email=xyz@abc.com; first_name=Benn; last_name=xyz}",
"active": true,
"marketing_optin": null,
"enrolled_at": "2018-05-08T18:41:46.905016Z",
"expires_at": null,
"access_code": null
},
{
"user": "@{id=3333; email=rst@abc.com; first_name=Cathy; last_name=rst}",
"active": true,
"marketing_optin": null,
"enrolled_at": "2018-05-08T18:41:47.015329Z",
"expires_at": null,
"access_code": null
}
]
}
输出文件格式应如下所示:
user_id,user_email,user_first_name,user_last_name,active,marketing_optin,enrolled_at,expires_at,access_code
所以,到目前为止,我尝试了不同的方法,但都没有给出所需的结果。 我什至无法读取 json 文件。 我试过下面的代码:
with open('C:\\_apps\\users.json') as data_file:
data = data_file.read()
data_content = json.loads(data)
但它是否会抛出以下错误:
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
在下面发布我目前正在尝试的代码:
import json
from pandas.io.json import json_normalize
import argparse
def flatten_json(y):
out = {}
def flatten(x, user=''):
if type(x) is dict:
for a in x:
flatten(x[a], user + a + '_')
elif type(x) is list:
i = 0
for a in x:
flatten(a, user + str(i) + '_')
i += 1
else:
out[user[:-1]] = x
flatten(y)
return out
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Converting json files into csv')
parser.add_argument(
"-j", "--json", dest="users.json", help="C:\_apps\training\output\", metavar="FILE", required=True)
print(parser)
args = parser.parse_args()
print(args)
with open(args.json_file, "r") as inputFile: # open json file
json_data = json.loads(inputFile.read()) # load json content
final_data = pd.DataFrame([flatten_json(elt) for elt in json_data['results']])
with open(args.json_file.replace(".json", ".csv"), "w") as outputFile: # open csv file
# saving DataFrame to csv
final_data.to_csv(outputFile, encoding='utf8', index=False)
它会抛出异常
args = parser.parse_args()
【问题讨论】:
-
是的,感谢您的指出。更新了