【发布时间】:2017-02-17 07:39:09
【问题描述】:
我正在尝试将下面的 JSON 输出添加到字典中,以保存到 SQL 数据库中。
{'Parkirisca': [
{
'ID_Parkirisca': 2,
'zasedenost': {
'Cas': '2016-10-08 13:17:00',
'Cas_timestamp': 1475925420,
'ID_ParkiriscaNC': 9,
'P_kratkotrajniki': 350
}
}
]}
我目前正在使用以下代码将值添加到字典中:
import scraperwiki
import json
import requests
import datetime
import time
from pprint import pprint
html = requests.get("http://opendata.si/promet/parkirisca/lpt/")
data = json.loads(html.text)
for carpark in data['Parkirisca']:
zas = carpark['zasedenost']
free_spaces = zas.get('P_kratkotrajniki')
last_updated = zas.get('Cas_timestamp')
parking_type = carpark.get('ID_Parkirisca')
if parking_type == "Avtomatizirano":
is_automatic = "Yes"
else:
is_automatic = "No"
scraped = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')
savetodb = {
'scraped': scraped,
'id': carpark.get("ID_Parkirisca"),
'total_spaces': carpark.get("St_mest"),
'free_spaces': free_spaces,
'last_updated': last_updated,
'is_automatic': is_automatic,
'lon': carpark.get("KoordinataX_wgs"),
'lat': carpark.get("KoordinataY_wgs")
}
unique_keys = ['id']
pprint savetodb
但是当我运行它时,它卡在for zas in carpark["zasedenost"] 并输出以下错误:
Traceback (most recent call last):
File "./code/scraper", line 17, in <module>
for zas in carpark["zasedenost"]:
KeyError: 'zasedenost'
我一直相信zas 现在实际上是一个字符串,而不是字典,但我是 Python 和 JSON 的新手,所以不知道要搜索什么来获得解决方案。我还在 Stack Overflow 上搜索了 KeyErrror when key exist 问题,但它们没有帮助,我相信这可能是因为这是一个子 for 循环。
更新:现在,当我将双引号换成单引号时,出现以下错误:
Traceback (most recent call last):
File "./code/scraper", line 17, in <module>
free_spaces = zas.get('P_kratkotrajniki')
AttributeError: 'unicode' object has no attribute 'get'
【问题讨论】:
-
在
for循环上方放置一个print(carpark),这样您就可以看到该变量中的内容。 -
顺便说一句,您共享的“JSON”不是有效的 JSON。 (它使用单引号。)
-
print(repr(carpark))可能会更好。这将帮助您发现它是否确实是预期的dict。 -
我也不认为你的意思是迭代
carpark["zasedenost"](因为它是一本字典)。你可能只想要zas = carpark["zasedenost"]。 -
请提供一个最小、完整和可验证的示例。 stackoverflow.com/help/mcve
标签: python json list for-loop dictionary