从json中检索数组并生成csv文件



我正在从API检索此数据,它以JSON格式出现。我只需要数据的某一部分,而忽略所有其他数据。生成一个csv文件,看起来像我的"output .csv"。我的最终目标是从json数据生成csv文件。

JSON是这样的:

{
"apiVersion": "3.0",
"loggedInUser": {
"id": "api@api.com",
"unid": "192",
"Access": [],
"user": [],
"local": {
"id": 1,
"dateFormat": "yyyy/dd/mm",
"languageTag": "en-IR"
}

},
"results":[
{
"id":"Random_Company_57",
"unid":"75",
"Access": [],
"user": [],
"local": {
"id": 1,
"dateFormat": "dd/MM/yy",
"languageTag": "ne-UA"
}
"preferredLanguage":"IN",
"prefName":"Christmas Bells",

},
{
"id":"xyz.abc@safe.net",
"unid":"98",
"Access": [],
"user": [],
"local": {
"id": 2,
"dateFormat": "MM/DD/yy",
"languageTag": "ne-UK"
},
"preferredLanguage":"en-CH",
"prefName":"Christmas Bells",

}
]
}

我的输出CSV("输出CSV")是这样的:

id,unid,id,dateFormat,languageTag
Random_Company_57,75,1,dd/MM/yy,ne-AU
xyz.abc@safe.net,98,2,MM/DD/yy,ne-UK
我的python代码:
import requests
from pathlib import Path
from pprint import pprint
import pandas as pd
import time
import os
import csv
import argparse
parser = argparse.ArgumentParser(description="Process some integers.")
parser.add_argument("-path_save", help="define where to save the file")
parser.add_argument("--verbose", help="display processing information")
start = time.time()
def GetUsers(URL, endPoint, path_save, verbose):
response = requests.get(URL, auth=('api@api.net', '1234'),
headers={
'Content-Type': 'application/json',
'key': 'Hb65OJBrrtV',
})
print(endPoint, response)
df3 = pd.DataFrame(response.json()["results"])["local"]
item_list=[]
for item in df3:
print(item)
item_details = {"id":None, "dateFormat":None, "languageTag":None}
item_details['id'] = item['id']
item_details['dateFormat'] = item['dateFormat']
item_details['languageTag'] = item['languageTag']
item_list.append(item_details)
print(item_list[0])
item_list[0].to_csv('change.csv',index=False)    
if __name__ == '__main__':
start = time.time()
args = parser.parse_args()
path_save = Path(args.path_save)
verbose = args.verbose    
endPoint = ['users']
for endPt in endPoint:
URL = "https://api.com/v95/" + endPt
GetUsers(URL, endPt, path_save, verbose)  
print("Processed time:", time.time() - start)  # Total Time

帮忙吗?

import requests
from pathlib import Path
from pprint import pprint
import pandas as pd
import time
import os
import csv
import argparse
parser = argparse.ArgumentParser(description="Process some integers.")
parser.add_argument("-path_save", help="define where to save the file")
parser.add_argument("--verbose", help="display processing information")
start = time.time()
def GetUsers(URL, endPoint, path_save, verbose):
response = requests.get(URL, auth=('api@api.net', '1234'),
headers={
'Content-Type': 'application/json',
'key': 'Hb65OJBrrtV',
})
print(endPoint, response)
res = pd.DataFrame(columns=['id', 'unid', 'local_id', 'dateFormat', 'languageTag'])
for item in response.json()['results']:
res = res.append(
{
'id': item['id'],
'unid': item['unid'],
'local_id': item['local']['id'],
'dateFormat': item['local']['dateFormat'],
'languageTag': item['local']['languageTag']
},
ignore_index=True
)
res.to_csv('change.csv', index=False)    
if __name__ == '__main__':
start = time.time()
args = parser.parse_args()
path_save = Path(args.path_save)
verbose = args.verbose    
endPoint = ['users']
for endPt in endPoint:
URL = "https://api.com/v95/" + endPt
GetUsers(URL, endPt, path_save, verbose)  
print("Processed time:", time.time() - start)  # Total Time

最新更新