Python 3.x 需要帮助使用Python从API中提取JSON数据并将其加载到SQL表中吗
请您帮助我编写Python逻辑,从API中提取JSON数据,并将其直接加载到SQL表中 我已经编写了这段Python代码,它在平面JSON结构中运行良好,但如果JSON有子数组,它就会失败 例如,Sales可以在一个JSON文件中附加一个标题记录和多个行记录。我能够提取和加载标题数据,但无法加载行数据 以下是我现有的Python代码:Python 3.x 需要帮助使用Python从API中提取JSON数据并将其加载到SQL表中吗,python-3.x,Python 3.x,请您帮助我编写Python逻辑,从API中提取JSON数据,并将其直接加载到SQL表中 我已经编写了这段Python代码,它在平面JSON结构中运行良好,但如果JSON有子数组,它就会失败 例如,Sales可以在一个JSON文件中附加一个标题记录和多个行记录。我能够提取和加载标题数据,但无法加载行数据 以下是我现有的Python代码: import requests from requests.auth import HTTPBasicAuth import json import pandas
import requests
from requests.auth import HTTPBasicAuth
import json
import pandas as pd
Endpoint = "https://api.cin7.com/api"
FullEndpointExtension = "/v1/SalesOrders?order=Id&page=1&rows=250"
User_name = "XXXXX"
Password_key = "YYYYYY"
Authentication = HTTPBasicAuth(User_name, Password_key)
try:
response = requests.get(Endpoint + FullEndpointExtension, auth = Authentication)
DataFrame= pd.read_json(response.text)
DataFrame = DataFrame[['id','createdDate','modifiedDate','createdBy','processedBy','isApproved','reference','memberId','firstName','lastName','company','email','phone','mobile','fax','deliveryFirstName','deliveryLastName','deliveryCompany','deliveryAddress1','deliveryAddress2','deliveryCity','deliveryState','deliveryPostalCode','deliveryCountry','billingFirstName','billingLastName','billingCompany','billingAddress1','billingAddress2','billingCity','billingPostalCode','billingState','billingCountry','branchId','branchEmail','projectName','trackingCode','internalComments','productTotal','freightTotal','freightDescription','surcharge','surchargeDescription','discountTotal','discountDescription','total','currencyCode','currencyRate','currencySymbol','taxStatus','taxRate','source','isVoid','memberEmail','memberCostCenter','memberAlternativeTaxRate','costCenter','alternativeTaxRate','estimatedDeliveryDate','salesPersonId','salesPersonEmail','paymentTerms','customerOrderNo','voucherCode','deliveryInstructions','status','stage','invoiceDate','invoiceNumber','dispatchedDate','logisticsCarrier','logisticsStatus','distributionBranchId','lineItems']]
#Capture Error Message
except Exception as ErrorMessage:
Message = str(ErrorMessage)
print(Message)
else:
Message = 'Successfully Completed'
print(Message)
DataFrame
Sample code:
import json
import requests
import pandas as pd
from io import StringIO
response = requests.get("https://api.github.com/events")
DataFrame= pd.read_json(StringIO(response.text))
for I in DataFrame['actor']:
print(DataFrame['id'],I['id'],I['login'])
示例JSON:
[
{
“id”:111,
“createdDate”:“2020-09-08T17:58:00Z”,
“修改日期”:“2020-09-10T02:01:09Z”,
“createdBy”:0,
“处理人”:99999,
“isApproved”:正确,
“参考”:“4000000000”,
“成员ID”:1111,
“firstName”:“RAM”,
“lastName”:“实时信用卡订单”,
“公司”:“,
“电子邮件”:ram@abc.co.nz",
“电话”:“041411111”,
“流动”:“流动”,
“传真”:“传真”,
“deliveryFirstName”:“Ram”,
“deliveryLastName”:“实时信用卡订单”,
“交货公司”:“交货公司”,
“交货地址1”:“XXXX”,
“交货地址2”:“交货地址”,
“交货城市”:“XXXXX”,
“deliveryState”:“QLD”,
“deliveryPostalCode”:“XXXXX”,
“交货国”:“澳大利亚”,
“billingFirstName”:“Ram”,
“billingLastName”:“实时信用卡订单”,
“billingCompany”:“,
“账单地址1”:“XXXXXX”,
“billingAddress2”:“,
“billingCity”:“XXXXXX”,
“billingPostalCode”:“XXXX”,
“billingState”:“QLD”,
“billingCountry”:“澳大利亚”,
“布兰奇”:3,
“分支邮件”:“,
“项目名称”:“ABC”,
“跟踪代码”:“,
“内部评论”:“,
“产品总计”:29.9500,
“货物总计”:0.0000,
“货物说明”:“,
“附加费”:0.0000,
“附加费说明”:“,
“折扣总额”:0.0000,
“折扣说明”:“,
“总计”:29.9500,
“货币代码”:“澳元”,
“货币汇率”:1.0,
“货币符号”:“$”,
“税务状况”:“包括”,
“税率”:0.1,
“来源”:“API”,
“自定义字段”:{
“订单1000”:空,
“订单_1001”:空,
“订单1002”:空,
“订单1003”:空,
“订单1004”:空
},
“isVoid”:错误,
“成员电子邮件”:ram@abc.co.nz",
“memberCostCenter”:空,
“memberAlternativeTaxRate”:空,
“成本中心”:“,
“替代税率”:“,
“estimatedDeliveryDate”:空,
“销售人员ID”:0,
“salesPersonEmail”:空,
“付款条件”:“付款条件”,
“customerOrderNo”:“,
“凭证代码”:空,
“送货须知”:“请在接待处离开”,
“状态”:“已批准”,
“阶段”:“已发送”,
“发票日期”:“2020-09-08T17:58:00Z”,
“发票编号”:5011111,
“派遣日期”:“2020-09-08T20:31:00Z”,
“物流承运人”:“BCD”,
“后勤状况”:10,
“distributionBranchId”:0,
“行项目”:[
{
“id”:363,
“createdDate”:“2020-09-08T17:58:00Z”,
“交易ID”:267777,
“家长ID”:199999,
“productId”:4444,
“productOptionId”:333333,
“integrationRef”:“0”,
“排序”:1,
“代码”:“T02392”,
“名称”:“席灰”,
“选择权1”:“,
“选择权2”:“,
“选择权3”:“,
“数量”:1.0,
“样式代码”:“T02392”,
“条形码”:空,
“sizeCodes”:空,
“行注释”:“,
“单位成本”:11.9900,
“单价”:14.9500,
“折扣”:0.0000,
“qtyShipped”:1.0,
“保持数量”:0.0,
“会计代码”:“,
“库存控制”:“先进先出”,
“股票运动”:[
{
“批处理”:空,
“数量”:1.0,
“串行”:空
}
],
“尺寸”:[]
},
{
“id”:365,
“createdDate”:“2020-09-08T17:58:00Z”,
“交易ID”:267777,
“家长ID”:199999,
“productId”:4444,
“productOptionId”:333333,
“integrationRef”:“0”,
“排序”:1,
“代码”:“A1111”,
“名称”:“席灰”,
“选择权1”:“,
“选择权2”:“,
“选择权3”:“,
“数量”:1.0,
“样式代码”:“ABCXYZ”,
“条形码”:“,
“sizeCodes”:空,
“行注释”:“,
“单位成本”:11.9900,
“单价”:0.0000,
“折扣”:0.0000,
“qtyShipped”:1.0,
“保持数量”:0.0,
“会计代码”:“,
“库存控制”:“批次”,
“股票运动”:[
{
“批次”:“100”,
“数量”:1.0,
“串行”:空
}
],
“尺寸”:[]
},
{
“id”:364,
“createdDate”:“2020-09-08T17:58:00Z”,
“transactionId”:2641,
“parentId”:0,
“productId”:4410,
“productOptionId”:4411,
“integrationRef”:“0”,
“排序”:2,
“代码”:“送货费”,
“名称”:“送货费”,
“选择权1”:“,
“选择权2”:“,
“选择权3”:“,
“数量”:1.0,
“样式代码”:“交货费”,
“条形码”:“,
“sizeCodes”:空,
“行注释”:“,
“单位成本”:0.0000,
“单价”:8.0000,
“折扣”:0.0000,
“qtyShipped”:1.0,
“保持数量”:0.0,
“账户代码”:“ABCXYZ”,
“库存控制”:“ABCXYZ”,
“股票运动”:[],
“尺寸”:[]
}
]
}
]最终解决的id:
导入json
作为pd进口熊猫
从pandas导入json_规范化
#https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.json_normalize.html
#https://www.kaggle.com/jboysen/quick-tutorial-flatten-nested-json-in-pandas
端点=”https://api.cin7.com/api"
FullEndpointExtension=“/v1/SalesOrders?其中=id=2666&order=id&page=1&rows=250”
User_name=“xxxxxx”
密码\u key=“xxxxxxx”
身份验证=HTTPBasicAuth(用户名、密码和密钥)
r=requests.get(Endpoint+FullEndpointExtension,auth=Authentication)
d=json.loads(r.text)
result1=json\u规范化(数据=d,记录路径='lineItems',元=['id'],错误='ignore',元前缀='Header')
打印(结果1)