如何使用 Python 将 API JSON 数据导出到 CSV 文件

发布于 2025-01-16 03:38:19 字数 1223 浏览 3 评论 0原文

我遇到了一个问题。我通过 API 获得了一些 JSON 格式的数据。

它看起来像这样:

示例:

{"ID":"938","ENTITY_ID":"CRM_DEAL","FIELD_NAME":"UF_CRM_111111111111","USER_TYPE_ID":"enumeration","LIST":\[{"ID":"700","SORT":"10","VALUE":"text1","DEF":"N"},{"ID":"948","SORT":"20","VALUE":"text2","DEF":"N"}\]}

我需要以 CSV 格式输出数据,如下所示:

ID, ENTITY_ID, FIELD_NAME

938, CRM_DEAL, UF_CRM_111111111111, 700, text1
938, CRM_DEAL, UF_CRM_111111111111, 948, text2

请帮助我,我该如何解决这个问题?

我尝试运行此代码:

import requests 
import pandas as pd 
r = requests.get("https://myrestAPImethod")

df = pd.DataFrame(r)

print(r.text) with open("test.csv", 'w+', encoding='UTF8', newline='') as f: 
f.write(r.text)

但我得到了错误的 CSV 文件。

我需要这个:

ID, ENTITY_ID, FIELD_NAME

938, CRM_DEAL, UF_CRM_111111111111, 700, text1
938, CRM_DEAL, UF_CRM_111111111111, 948, text2

但是我

{"ID":"938","ENTITY_ID":"CRM_DEAL","FIELD_NAME":"UF_CRM_111111111111","USER_TYPE_ID":"enumeration","LIST":\[{"ID":"700","SORT":"10","VALUE":"text1","DEF":"N"},{"ID":"948","SORT":"20","VALUE":"text2","DEF":"N"}\]}

在第一个 A1 单元格中有文本(当我用 Excel 打开 CSV 时)。

I faced with a problem. I've got some data in JSON format with API.

It looks like that:

Example:

{"ID":"938","ENTITY_ID":"CRM_DEAL","FIELD_NAME":"UF_CRM_111111111111","USER_TYPE_ID":"enumeration","LIST":\[{"ID":"700","SORT":"10","VALUE":"text1","DEF":"N"},{"ID":"948","SORT":"20","VALUE":"text2","DEF":"N"}\]}

I need to output data in CSV format like this:

ID, ENTITY_ID, FIELD_NAME

938, CRM_DEAL, UF_CRM_111111111111, 700, text1
938, CRM_DEAL, UF_CRM_111111111111, 948, text2

Help me please, how can I solve this problem?

I've tried to run this code:

import requests 
import pandas as pd 
r = requests.get("https://myrestAPImethod")

df = pd.DataFrame(r)

print(r.text) with open("test.csv", 'w+', encoding='UTF8', newline='') as f: 
f.write(r.text)

But I've got wrong CSV file.

I need this:

ID, ENTITY_ID, FIELD_NAME

938, CRM_DEAL, UF_CRM_111111111111, 700, text1
938, CRM_DEAL, UF_CRM_111111111111, 948, text2

But I,ve got text

{"ID":"938","ENTITY_ID":"CRM_DEAL","FIELD_NAME":"UF_CRM_111111111111","USER_TYPE_ID":"enumeration","LIST":\[{"ID":"700","SORT":"10","VALUE":"text1","DEF":"N"},{"ID":"948","SORT":"20","VALUE":"text2","DEF":"N"}\]}

in the first A1 cell (when I open CSV with Excel).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月亮邮递员 2025-01-23 03:38:20

您使用 pandas 将其转换为数据帧。所以现在只需使用 pandas 写入文件:

r = {"ID":"938","ENTITY_ID":"CRM_DEAL","FIELD_NAME":"UF_CRM_111111111111","USER_TYPE_ID":"enumeration","LIST":[{"ID":"700","SORT":"10","VALUE":"text1","DEF":"N"},{"ID":"948","SORT":"20","VALUE":"text2","DEF":"N"}]}


df = pd.DataFrame(r)
df.to_csv("test.csv", index=False)

将其扁平化一点:

import pandas as pd

r = {"ID":"938","ENTITY_ID":"CRM_DEAL","FIELD_NAME":"UF_CRM_111111111111","USER_TYPE_ID":"enumeration","LIST":[{"ID":"700","SORT":"10","VALUE":"text1","DEF":"N"},{"ID":"948","SORT":"20","VALUE":"text2","DEF":"N"}]}

df1 = pd.DataFrame(r).iloc[:,:-2]
df2 = pd.json_normalize(r, record_path=['LIST'])

df = pd.concat([df1, df2], axis=1)
df.to_csv("test.csv", index=False)

输出:

print(df)
    ID ENTITY_ID           FIELD_NAME   ID SORT  VALUE DEF
0  938  CRM_DEAL  UF_CRM_111111111111  700   10  text1   N
1  938  CRM_DEAL  UF_CRM_111111111111  948   20  text2   N

You converted it to a dataframe with pandas. So now just use pandas to write to file:

r = {"ID":"938","ENTITY_ID":"CRM_DEAL","FIELD_NAME":"UF_CRM_111111111111","USER_TYPE_ID":"enumeration","LIST":[{"ID":"700","SORT":"10","VALUE":"text1","DEF":"N"},{"ID":"948","SORT":"20","VALUE":"text2","DEF":"N"}]}


df = pd.DataFrame(r)
df.to_csv("test.csv", index=False)

To flatten it out a bit:

import pandas as pd

r = {"ID":"938","ENTITY_ID":"CRM_DEAL","FIELD_NAME":"UF_CRM_111111111111","USER_TYPE_ID":"enumeration","LIST":[{"ID":"700","SORT":"10","VALUE":"text1","DEF":"N"},{"ID":"948","SORT":"20","VALUE":"text2","DEF":"N"}]}

df1 = pd.DataFrame(r).iloc[:,:-2]
df2 = pd.json_normalize(r, record_path=['LIST'])

df = pd.concat([df1, df2], axis=1)
df.to_csv("test.csv", index=False)

Output:

print(df)
    ID ENTITY_ID           FIELD_NAME   ID SORT  VALUE DEF
0  938  CRM_DEAL  UF_CRM_111111111111  700   10  text1   N
1  938  CRM_DEAL  UF_CRM_111111111111  948   20  text2   N
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文