【发布时间】:2016-02-03 16:28:12
【问题描述】:
我正在尝试创建一个执行以下操作的 python 脚本:
- 解析 CSV 文件
- 通过 REST API 将 CSV 文件发送到远程服务器
我的代码正在解析 CSV 文件并将其转换为 JSON 对象。
但是,当它导入到远程服务器时,会返回错误消息:org.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject
我认为这可能是因为我的代码正在创建对象数组而不是 JSON 对象。如何解决此问题,以便我的脚本上传 CSV 数据并将列和值正确映射到远程表?
#Requests package for python import requests
import csv
import json
import requests
f = open('example_import_csv.csv', 'rU')
reader = csv.DictReader(f, fieldnames = ("u_date","u_product","u_serial_number"))
out = json.dumps([row for row in reader])
print(out)
#Set request parameters
url = 'xxxxxx'
user = 'xxxxxx'
pwd = 'xxxxxxxx'
#Set proper headers
headers = {"Content-Type":"application/json","Accept":"application/json"}
response = requests.post(url, auth=(user, pwd), headers=headers ,data=out)
#Check for HTTP codes other than 200
if response.status_code != 200:
print('Status:', response.status_code, 'Headers:', response.headers, 'Response Text', response.text, 'Error Response:',response.json())
exit()
#Decode the JSON response into a dictionary and use the data
print('Status:',response.status_code,'Headers:',response.headers,'Response:',response.json())
输出
[{"u_date": "u_date", "u_product": "u_product", "u_serial_number": "u_serial_number"}, {"u_date": "1/12/15", "u_product": "Apples", "u_serial_number": "11"}, {"u_date": "1/29/15", "u_product": "Pears", "u_serial_number": "12"}, {"u_date": "1/12/15", "u_product": "Oranges", "u_serial_number": "13"}, {"u_date": "1/29/15", "u_product": "Blackberries", "u_serial_number": "14"}, {"u_date": "2/5/15", "u_product": "Blueberries", "u_serial_number": "15"}, {"u_date": "2/7/15", "u_product": "Bananas", "u_serial_number": "16"}, {"u_date": "2/7/15", "u_product": "Strawberries", "u_serial_number": "17"}]
Status: 200 Headers: {'Strict-Transport-Security': 'max-age=15768000; includeSubDomains;','Transfer-Encoding': 'chunked', 'Content-Encoding': 'gzip', 'Content-Type': 'application/json;charset=utf-8'}
Response: {'reason': None, 'error': 'org.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject'}
编辑:
请求必须是 JSON 对象。我需要格式为包含单个数组的 JSON 对象。
我通过手动创建这种格式的 json 对象进行了测试,它可以工作。如何解析 CSV 文件以将其转换为这种特定格式?
{"records":[{"u_date": "u_date", "u_product": "u_product", "u_serial_number": "u_serial_number"}, {"u_date": "1/12/15", "u_product": "Apples", "u_serial_number": "11"}, {"u_date": "1/29/15", "u_product": "Pears", "u_serial_number": "12"}, {"u_date": "1/12/15", "u_product": "Oranges", "u_serial_number": "13"}, {"u_date": "1/29/15", "u_product": "Blackberries", "u_serial_number": "14"}, {"u_date": "2/5/15", "u_product": "Blueberries", "u_serial_number": "15"}, {"u_date": "2/7/15", "u_product": "Bananas", "u_serial_number": "16"}, {"u_date": "2/7/15", "u_product": "Strawberries", "u_serial_number": "17"}]}
【问题讨论】: