针对需要帮助使用Python从API中提取JSON数据并将其加载到SQL表这个问题,本篇文章进行了详细的解答,同时本文还将给你拓展Ansible无法从URL中提取json,但Curl可以我错过了什么?
针对需要帮助使用 Python 从 API 中提取 JSON 数据并将其加载到 SQL 表这个问题,本篇文章进行了详细的解答,同时本文还将给你拓展Ansible 无法从 URL 中提取 json,但 Curl 可以我错过了什么?、JSON API:用 JSON 构建 API 的标准指南中文版、Json:api:如何在 java 中的补丁请求中发送带有数组的 json 文件?我的 json 文件有 JSONArray 而不是 JSONObject、json模块:json.dumps()、json.loads()、json.dump()、json.load()等相关知识,希望可以帮助到你。
本文目录一览:- 需要帮助使用 Python 从 API 中提取 JSON 数据并将其加载到 SQL 表
- Ansible 无法从 URL 中提取 json,但 Curl 可以我错过了什么?
- JSON API:用 JSON 构建 API 的标准指南中文版
- Json:api:如何在 java 中的补丁请求中发送带有数组的 json 文件?我的 json 文件有 JSONArray 而不是 JSONObject
- json模块:json.dumps()、json.loads()、json.dump()、json.load()
需要帮助使用 Python 从 API 中提取 JSON 数据并将其加载到 SQL 表
如何解决需要帮助使用 Python 从 API 中提取 JSON 数据并将其加载到 SQL 表
请您帮我编写 Python 逻辑以从 API 中提取 PullJSON 数据并将其直接加载到 sql 表中。
我已经编写了这个 Python 代码,它在平面 JSON 结构中运行良好,但如果 JSON 有子数组则失败。
例如,Sales 可以在附加的单个 JSON 文件中包含一个标题记录和多个行记录。我能够拉取和加载标题数据,但无法加载行数据。
这是我现有的 Python 代码:
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: [ { “身份证”:111, "createdDate": "2020-09-08T17:58:00Z","修改日期": "2020-09-10T02:01:09Z","createdBy": 0,"processedBy": 99999,“已批准”:真, “参考”:“4000000000”, “会员ID”:1111, "firstName": "内存","lastName": "实时信用卡订单",“公司”: ””, "email": "ram@abc.co.nz","电话": "041411111",“移动的”: ””, "传真": "","deliveryFirstName": "Ram","deliveryLastName": "实时信用卡订单","送货公司": "","deliveryAddress1": "XXXX","deliveryAddress2": " ","deliveryCity": "XXXXX","deliveryState": "昆士兰州","deliveryPostalCode": "XXXXX","deliveryCountry": "澳大利亚","billingFirstName": "Ram","billingLastName": "实时信用卡订单","计费公司": "","billingAddress1": "XXXXXX","billingAddress2": "","billingCity": "XXXXXX","billingPostalCode": "XXXX","billingState": "昆士兰州","billingCountry": "澳大利亚","branchId": 3,"branchEmail": "","项目名称": "ABC",“跟踪代码”: ””, "内部评论": "","productTotal": 29.9500,“运费总计”:0.0000, "货运描述": "",“附加费”:0.0000, "附加费说明": "","discountTotal": 0.0000,"折扣说明": "",“总计”:29.9500, "currencyCode": "澳元",“货币汇率”:1.0, "货币符号": "$","taxStatus": "包含",“税率”:0.1, "source": "API",“自定义字段”:{ “订单_1000”:空, “订单_1001”:空, “订单_1002”:空, “订单_1003”:空, “订单_1004”:空 },“isVoid”:假, "memberEmail": "ram@abc.co.nz",“memberCostCenter”:空, “memberAlternativeTaxRate”:空, “成本中心”: ””, "alternativeTaxRate": "","estimatedDeliveryDate": null,"salesPersonId": 0,"salesPersonEmail": null,“付款条件”: ””, "customerOrderNo": "",“优惠券代码”:空, "deliveryInstructions": "请在接待处离开","状态": "已批准","stage": "已调度","发票日期": "2020-09-08T17:58:00Z",“发票编号”:5011111, "dispatchedDate": "2020-09-08T20:31:00Z","logisticsCarrier": "BCD","物流状态": 10,"distributionBranchId": 0,“行项目”:[ { “身份证”:363, "createdDate": "2020-09-08T17:58:00Z",“交易编号”:267777, "parentId": 199999,“产品编号”:4444, “productOptionId”:333333, "integrationRef": "0",“排序”:1, "code": "T02392","name": "垫灰色",“选项1”: ””, “选项2”:“”, “选项3”:“”, “数量”:1.0, "styleCode": "T02392",“条形码”:空, “大小代码”:空, "lineComments": "",“单位成本”:11.9900, “单价”:14.9500, “折扣”:0.0000, "qtyShipped": 1.0,“持有数量”:0.0, "帐户代码": "","stockControl": "先进先出",“股票运动”:[ { “批次”:空, “数量”:1.0, “串行”:空 } ],“尺寸”:[] },{ “身份证”:365, "createdDate": "2020-09-08T17:58:00Z",“排序”:1, "代码": "A1111",“选项1”: ””, “选项2”:“”, “选项3”:“”, “数量”:1.0, "styleCode": "ABCXYZ",“条码”: ””, “大小代码”:空, "lineComments": "",“单位成本”:11.9900, “单价”:0.0000, “折扣”:0.0000, "qtyShipped": 1.0,"stockControl": "批次",“股票运动”:[ { “批次”:“100”, “数量”:1.0, “串行”:空 } ],{ “身份证”:364, "createdDate": "2020-09-08T17:58:00Z",“交易编号”:2641, “父母ID”:0, “产品编号”:4410, “productOptionId”:4411, "integrationRef": "0",“排序”:2, "code": "DELIVERYFEE","name": "送货费",“选项1”: ””, “选项2”:“”, “选项3”:“”, “数量”:1.0, "styleCode": "DeliveryFee",“单位成本”:0.0000, “单价”:8.0000, “折扣”:0.0000, "qtyShipped": 1.0,“持有数量”:0.0, "accountCode": "ABCXYZ","stockControl": "ABCXYZ",“股票运动”:[], “尺寸”:[] } ] } ]
解决方法
终于解决了id:
import json
import pandas as pd
from pandas import json_normalize
#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
Endpoint = "https://api.cin7.com/api"
FullEndpointExtension = "/v1/SalesOrders?where=id=2666&order=Id&page=1&rows=250"
User_name = "xxxxxx"
Password_key = "xxxxxxx"
Authentication = HTTPBasicAuth(User_name,Password_key)
r = requests.get(Endpoint + FullEndpointExtension,auth = Authentication)
d = json.loads(r.text)
result1=json_normalize(data=d,record_path=''lineItems'',meta=[''id''],errors=''ignore'',meta_prefix=''Header'')
print(result1)
Ansible 无法从 URL 中提取 json,但 Curl 可以我错过了什么?
如何解决Ansible 无法从 URL 中提取 json,但 Curl 可以我错过了什么??
从特定网站提取 json 时,我在使用 Ansible URI 模块时遇到了一些问题。
Ansible 代码:
- name: check for Tenable Agent updates.
uri:
url: https://www.tenable.com/downloads/api/v1/public/pages/nessus-agents
follow_redirects: none
validate_certs: false
return_content: yes
body_format: json
register: tenable_result
运行时的 Ansible 输出:
TASK [agent-check : check for Tenable Agent updates.] ***************************************************************************************************************************
fatal: [testhost.local]: Failed! => {"cf_cache_status": "DYNAMIC","cf_ray": "66e527b55f742542-SJC","changed": false,"connection": "close","content": "Bad Request","content_length": "11","content_type": "text/plain; charset=utf-8","date": "Tue,13 Jul 2021 20:10:30 GMT","elapsed": 0,"expect_ct": "max-age=604800,report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"","msg": "Status code was 400 and not [200]: HTTP Error 400: Bad Request","redirected": false,"server": "cloudflare","set_cookie": "AWSALB=mjbt0/pPG5uYbItH6JZZsMNU31tfIYcjN3EzGUGGwe0yh1IyClNI3QZwwaIsvvxTBsxAtONNkX5ikvZUQxB/3m5RsPKsZKCs9GC/shJpEAmAiRTvDFgzmdsEsBl2; Expires=Tue,20 Jul 2021 20:10:30 GMT; Path=/,AWSALBCORS=mjbt0/pPG5uYbItH6JZZsMNU31tfIYcjN3EzGUGGwe0yh1IyClNI3QZwwaIsvvxTBsxAtONNkX5ikvZUQxB/3m5RsPKsZKCs9GC/shJpEAmAiRTvDFgzmdsEsBl2; Expires=Tue,20 Jul 2021 20:10:30 GMT; Path=/; SameSite=None; Secure,__cf_bm=cf4aba5cd769c19f68e8a6b84448295bb7acca50-1626207030-1800-AcDXU5VzEKMNjpyegluMOFzCeIfWcxvrpS8wims3LQHysBisfPjp051BUkVGysLvq7pPwEfXNDrNwGV7VV2GPbI=; path=/; expires=Tue,13-Jul-21 20:40:30 GMT; domain=.tenable.com; HttpOnly; Secure; SameSite=None","status": 400,"strict_transport_security": "max-age=31536000","url": "https://www.tenable.com/downloads/api/v1/public/pages/nessus-agents","x_content_type_options": "nosniff"}
问题:我如何告诉 Ansible 预测此重定向并满足 cloudflare 的任何需求,以便我继续处理 tenable.com 上的文件和 ID 数据?
我知道 URL 有效并且可以输出所需的 json 数据,因为我可以通过 Curl 和 jq 解析文件名和下载 ID,如下所示:
$ curl -s https://www.tenable.com/downloads/api/v1/public/pages/nessus-agents| jq ''.downloads[] | "\(.file) \(.id)"''
"Agent_plugins_expires_2021-07-15.tgz 13183"
"nessusAgent-8.3.0-x64.msi 13130"
"nessusAgent-8.3.0-Win32.msi 13131"
"nessusAgent-8.3.0.dmg 13132"
"nessusAgent-8.3.0-debian6_amd64.deb 13134"
"nessusAgent-8.3.0-debian6_i386.deb 13135"
"nessusAgent-8.3.0-amzn.x86_64.rpm 13133"
"nessusAgent-8.3.0-es5.x86_64.rpm 13136"
"nessusAgent-8.3.0-es5.i386.rpm 13137"
"nessusAgent-8.3.0-es6.x86_64.rpm 13138"
"nessusAgent-8.3.0-es6.i386.rpm 13139"
"nessusAgent-8.3.0-es7.x86_64.rpm 13140"
"nessusAgent-8.3.0-amzn2.aarch64.rpm 13149"
"nessus-agent-updates-8.3.0.tar.gz 13150"
"nessusAgent-8.3.0-es8.x86_64.rpm 13141"
"nessusAgent-8.3.0-fc20.x86_64.rpm 13142"
"nessusAgent-8.3.0-suse11.x86_64.rpm 13143"
"nessusAgent-8.3.0-suse11.i586.rpm 13144"
"nessusAgent-8.3.0-suse12.x86_64.rpm 13145"
"nessusAgent-8.3.0-suse15.x86_64.rpm 13146"
"nessusAgent-8.3.0-ubuntu1110_amd64.deb 13147"
"nessusAgent-8.3.0-ubuntu1110_i386.deb 13148"
"tenable-2048.gpg 7000"
"tenable-1024.gpg 6998"
知道我的 Ansible 代码缺少什么吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
JSON API:用 JSON 构建 API 的标准指南中文版
译文地址:https://github.com/justjavac/json-api-zh_CN
如果你和你的团队曾经争论过使用什么方式构建合理 JSON 响应格式, 那么 JSON API 就是你的 anti-bikeshedding 武器。
通过遵循共同的约定,可以提高开发效率,利用更普遍的工具,可以是你更加专注于开发重点:你的程序。
基于 JSON API 的客户端还能够充分利用缓存,以提升性能,有时甚至可以完全不需要网络请求。
下面是一个使用 JSON API 发送响应(response)的示例:
{ "links": { "posts.author": { "href": "http://example.com/people/{posts.author}", "type": "people" }, "posts.comments": { "href": "http://example.com/comments/{posts.comments}", "type": "comments" } }, "posts": [{ "id": "1", "title": "Rails is Omakase", "links": { "author": "9", "comments": [ "5", "12", "17", "20" ] } }] }
顶级的 "links" 部分是可选的。 除去 "links" 部分,此响应看起来非常接近使用已经存在的 API 构建的响应。
JSON API 不仅可以用来构建响应,还包括创建和更新资源。
现状
本文档是一个正在进展的工作,在具体实现过程中将会有所改变。详细信息请查看现状页面。
MIME 类型
JSON API 已经在 IANA 机构完成注册。 它的 MIME 类型是 application/vnd.api+json。
格式
在开始使用 JSON API 前,先查看一下JSON API 格式文档
更新历史
- 2013-05-03:最初版本的草案。
- 2013-07-22:媒体类型在 IANA 注册完成。
你可以使用 RSS 阅读器在这里订阅本提要的变更。
Json:api:如何在 java 中的补丁请求中发送带有数组的 json 文件?我的 json 文件有 JSONArray 而不是 JSONObject
如何解决Json:api:如何在 java 中的补丁请求中发送带有数组的 json 文件?我的 json 文件有 JSONArray 而不是 JSONObject?
我可以在 json 文件中使用 JSONObject 但不能在 json 文件中使用 JSONOArray。我想使用一个文件来保存我的测试数据。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
json模块:json.dumps()、json.loads()、json.dump()、json.load()
json.dumps()、json.loads()、json.dump()、json.load() 4个方法的总结和使用:
注意:存在文件里面的东西,读出来都是字符串
import json
1、json.dumps()使用
2、json.loads()使用
3、json.load()的使用
4、json.dump()的使用
关于需要帮助使用 Python 从 API 中提取 JSON 数据并将其加载到 SQL 表的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Ansible 无法从 URL 中提取 json,但 Curl 可以我错过了什么?、JSON API:用 JSON 构建 API 的标准指南中文版、Json:api:如何在 java 中的补丁请求中发送带有数组的 json 文件?我的 json 文件有 JSONArray 而不是 JSONObject、json模块:json.dumps()、json.loads()、json.dump()、json.load()等相关内容,可以在本站寻找。
本文标签: