python - 仅打印 json 文件的特定部分
问题描述
我想知道在 python 中尝试打印以下代码的名称数据时我做错了什么。
import urllib.request, json
with urllib.request.urlopen("<THIS IS A URL IN THE ORIGINAL SCRIPT>") as url:
data = json.loads(url.read().decode())
print (data['Departure']['Product']['name'])
print (data['Departure']['Stops']['Stop'][0]['depTime'])
这是我从中获取数据的 api:
{
"Departure" : [ {
"Product" : {
"name" : "Länstrafik - Buss 201",
"num" : "201",
"catCode" : "7",
"catOutS" : "BLT",
"catOutL" : "Länstrafik - Buss",
"operatorCode" : "254",
"operator" : "JLT",
"operatorUrl" : "http://www.jlt.se"
},
"Stops" : {
"Stop" : [ {
"name" : "Gislaved Lundåkerskolan",
"id" : "740040260",
"extId" : "740040260",
"routeIdx" : 12,
"lon" : 13.530096,
"lat" : 57.298178,
"depTime" : "20:55:00",
"depDate" : "2019-03-05"
}
解决方案
正如凯尔在上一个答案中所说,data["Departure"]
是一个列表,但您正试图将其用作字典。有 2 种可能的解决方案。
将 etc.更改
data["Departure"]["Stops"]["Stop"]
为data["Departure"][0]["Stops"]["Stop"]
etc.更改 JSON 文件以将其转换为字典,这样您就可以保留原始代码。这将使最终的 JSON 片段看起来像这样:
"Departure" : {
"Product" : {
"name" : "Länstrafik - Buss 201",
"num" : "201",
"catCode" : "7",
"catOutS" : "BLT",
"catOutL" : "Länstrafik - Buss",
"operatorCode" : "254",
"operator" : "JLT",
"operatorUrl" : "http://www.jlt.se"
},
"Stops" : {
"name" : "Gislaved Lundåkerskolan",
"id" : "740040260",
"extId" : "740040260",
"routeIdx" : 12,
"lon" : 13.530096,
"lat" : 57.298178,
"depTime" : "20:55:00",
"depDate" : "2019-03-05"
}
}
推荐阅读
- ruby-on-rails - 我如何访问用户详细信息?
- java - 两个玩家的分屏 Java 2D 游戏 Canvas 和 JFrame
- csv - Apache Nifi:计算 csv 文件中字符串中的数字
- python - 创建嵌套字典
- python - 在 Python 和其他操作系统中加载和保存 C++ 火炬模型
- ios - 在 iOS Swift 中获取用户当前城市、州和国家/地区的最佳方式是什么?
- javascript - Javascript 仅显示每个数组元素的首字母一次
- javascript - 使用 ReactCSSTransitionGroup 的 React Hooks 不起作用
- c++ - GLM中的Java Matrix4f.transform等价物?
- javascript - 检查对象是否在数组中?