Python数据上传错误

时间:2015-05-21 21:42:47

标签: python json python-2.7 api urllib2

通过使用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"
 }
}

我认为代码无法正确解析我的输入文件。你对这个解决方案有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您的文件已编码为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)

答案 1 :(得分:1)

500错误表示服务器进程崩溃,试图解析您的输入。您的数据要么具有额外的密钥,要么没有足够的密钥,或者您的数据的格式是服务器未预料到的。

基于: 线= 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 API的Requests库 - 请参阅:http://docs.python-requests.org/en/latest/