Ошибка загрузки данных Python

57
7

Используя код python, я пытаюсь читать данные из json файлов и загружать их через API. Однако я получаю HTTP-ошибку 5000. Ниже приведен мой код:

    url = 'http://sipdev1.vbi.vt.edu:8080/EpiViewer/epiviewer/services/uploadGraphData'

for i in json_file_name:
json_data = open (i, 'r')
lines=json_data.readlines()
req = urllib2.Request(url)
req.add_header('Content-Type','application/json')
data = json.dumps(lines)
response = urllib2.urlopen(req,data)

Вот ошибка:

raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 500: Internal Server Error

Входной файл Пример:

{
"username": "xxxxx",
"password": "yyyyy",
"timeSeriesName": "Liberia_01-18-2015",
"dataType": "Cases",
"plotType": "Cumulative",
"filename": "C_C.csv",
"dateFormat": "MM-dd-yy",
"forecastedOn": "01/18/2015",
"visibility": "Public",
"data": {
"01-25-2015":"26 38 14",
"02-01-2015":"22 33 11",
"02-08-2015":"19 32 6",
"02-15-2015":"17 32 2",
"02-22-2015":"15 18 12",
"03-01-2015":"14 26 2"
}
}

Я думаю, что код неправильно обрабатывает мои входные файлы. Вы имеете какое-либо представление об этом решении?

спросил(а) 2015-05-22T00:42:00+03:00 5 лет, 4 месяца назад
1
Решение
57

Ошибка 500 указывает, что процесс сервера разбился, пытаясь проанализировать ваш ввод. У ваших данных есть дополнительные ключи, недостаточно ключей или ваши данные отформатированы таким образом, который не ожидал сервер.

На основе: lines = json_data.readlines() и data = json.dumps(lines)

Похоже, что вы фактически не преобразовали свои данные в объект json, и поэтому не можете сбрасывать его с json. Попробуйте заменить:

json_data = open (i, 'r')
lines=json_data.readlines()

с:

with open(i) as data_file: 
json_data = json.load(data_file)

Вы также должны использовать лучшие имена, чем i, и пытаться/улавливать ошибки, связанные с неправильным форматированием json файлов.

Кроме того, вы найдете библиотеку запросов намного проще в использовании для http APIs- см. Это: http://docs.python-requests.org/en/latest/

ответил(а) 2015-05-22T00:56:00+03:00 5 лет, 4 месяца назад
58

Ваш файл уже закодирован JSON. Вам не нужно его снова закодировать. Отправляйте файл без изменений:

for name in json_file_name:
with open(name) as json_data:
data = json_data.read()
req = urllib2.Request(url, data, {'Content-Type': 'application/json'})
response = urllib2.urlopen(req)

ответил(а) 2015-05-22T00:44:00+03:00 5 лет, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема