Я пытаюсь создать сценарий питона, который делает следующее:Python POST через REST ошибки API JSONArray не может быть приведен к JSONObject
- Разбор CSV файл
- Послать CSV файл на удаленный сервер с помощью REST API
Код, который у меня есть, предназначен для анализа файла 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'}
EDIT:
Запрос должен быть объект 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"}]}