【发布时间】:2017-06-01 17:20:20
【问题描述】:
我开发了以下代码来从 Web API 中提取数据,并尝试根据以下条件对其进行操作:计算用户在日期之间出现的次数初始日期是当前时间 - 6 天,最后日期为当前时间。
我收到的 JSON 对象具有以下结构:
[{
id: 1003384,
user_id : 0001
CreatedOn: "2017-02-16 15:54:48",
Problem: "AVAILABILILTY",
VIP: "YES",
Vendor_CODE: "XYZ12345",
Week_id: "07",
},
{
id: 1003338,
user_id: 0002
CreatedOn: "2017-02-15 13:49:16",
Problem: "AVAILABILILTY",
VIP: "NO",
Vendor_CODE: "XYZ67890",
Week_id: "09",
},
{
id: 1553338,
user_id: 0002
CreatedOn: "2017-03-15 09:30:36",
Problem: "AVAILABILILTY",
VIP: "YES",
Vendor_CODE: "ACE67890",
Week_id: "13",
}]
现在,当我执行以下代码时,我无法计算用户在给定两个日期之间出现的次数,因为我得到错误键应该是整数而不是字符串,我不知道应该在哪里实现初始日期和最终日期.
from datetime import datetime, timedelta
from rest_framework.response import Response
import json, urllib.request
from collections import Counter
#Request a response to the Web API
def get_data(request, *args, **kwargs):
# YYYY-MM-DD
start_date = datetime.now() - timedelta(days=7)
end_date = datetime.now() - timedelta(days=1)
with urllib.request.urlopen("http://10.61.202.98:8081/T/ansdb/api/rows/triage/ect/tickets",timeout=15) as url:
response_data = json.loads(url.read().decode())
#verify that you receive data in your terminal
print(response_data[0])
# The JSON object should be manipulated as a dictionary but this is not the case
user_times = Counter(k['user_id'] for k in response_data if k.get('user_id'))
return JsonResponse(response_data, safe=False)
为了避免错误键应该是整数而不是字符串,我使用 print(response_data[0]) 来获取输出:
{
id: 1003384,
user_id : 0001
CreatedOn: "2017-02-16 15:54:48",
Problem: "AVAILABILILTY",
VIP: "YES",
Vendor_CODE: "XYZ12345",
Week_id: "07",
}
我的问题是:
当我使用 json.loads(url.read().decode()) 解析我的 JSON 数据后,它是字典吗?如果是这样,为什么我无法将数据检索为 response_data['user_id'] 以查看所有用户?
代码中缺少什么来计算用户为了工作而出现的次数?
- 我应该在哪里实现日期代码以按给定日期检索用户?
在此先感谢,请随时对这篇文章提出任何想法。
更新 2017 年 6 月 6 日
我解析的 JSON 数据是一个字典,我可以验证它,因为我使用了 print(isinstance(response_data[0],dict)),结果为 True。
我尝试使用 print(response_data.keys()) 打印此字典中的键,但 遇到此错误:列表对象没有属性“键”。如果 Python 声明这是一本字典但我无法打印密钥,这怎么可能?
【问题讨论】:
-
不要打印,试试这个
isinstance(response_data[0], dict),看看它是否真的是一本字典,然后把结果贴出来 -
我做了 print(isinstance(response_data[0],dict)),结果是 True。
标签: python json django python-3.x