好的,所以在过去的两天里我一直在为此而奋斗,没有真正的进步。我是python和编码的初学者,但这是我自己无法解决的第一个问题。
所以我有这个带有JSON格式的长文件,来自youtubeapi的大约7000个条目。 现在我想要一个简短的脚本来打印某个字典键的某些信息('videoId')(称为'key'):
我的剧本:
import json
f = open ('path file.txt', 'r')
s = f.read()
trailers = json.loads(s)
print(trailers['key']['Items']['id']['videoId'])
# print(trailers['key']['videoId'] gives same response
错误:
print(trailers['key']['Items']['id']['videoId'])
TypeError: string indices must be integers
当我想打印字典键的所有信息时,它确实有效: 此脚本有效
import json
f = open ('path file.txt', 'r')
s = f.read()
trailers = json.loads(s)
print(trailers['key'])
同样 print(类型(预告片))会产生 class'dict',因为它应该是。
我的JSON文件格式如下,来自youtube API,youtube#searchListResponse。
{
"kind": "youtube#searchListResponse",
"etag": "",
"nextPageToken": "",
"regionCode": "",
"pageInfo": {
"totalResults": 1000000,
"resultsPerPage": 1
},
"items": [
{
"kind": "youtube#searchResult",
"etag": "",
"id": {
"kind": "youtube#video",
"videoId": ""
},
"snippet": {
"publishedAt": "",
"channelId": "",
"title": "",
"description": "",
"thumbnails": {
"default": {
"url": "",
"width": 120,
"height": 90
},
"medium": {
"url": "",
"width": 320,
"height": 180
},
"high": {
"url": "",
"width": 480,
"height": 360
}
},
"channelTitle": "",
"liveBroadcastContent": "none"
}
}
]
}
您需要提供哪些其他信息才能了解问题?
答案 0 :(得分:0)
我没有真正研究过youtube api,但是查看代码和你给出的样本似乎错过了[0]。查看json的结构,在项中有一个列表。
import json
f = open ('json1.json', 'r')
s = f.read()
trailers = json.loads(s)
print(trailers['items'][0]['id']['videoId'])
答案 1 :(得分:0)
我之前根本没有使用过json。但它基本上以dicts的形式导入,带有更多的词组,列表等。适用时。至少从我的理解来看。
所以,当你执行type(trailers)
时,你会得到类型字典。然后你用trailers['key']
做词。如果你做那种类型的话,它也应该是一个dict,如果事情正常的话。完成每个字典中的项目应该最终找到您的错误。
Pythons错误说你正在尝试查找字符串的索引/索引,它只接受整数,而你正在尝试使用dict。所以你需要找出为什么你在使用每个参数时得到一个字符串而不是dict。
编辑以添加示例。如果你的dict在key' item'上包含一个字符串,那么你得到一个字符串作为回报,而不是你可以从中得到一个字典的新字典。例如,json中的item
似乎是一个列表,其中包含dicts。不是一个字典本身。
答案 2 :(得分:0)
以下代码为我提供了所提供的样本数据中的所有视频ID(实际上根本没有id):
import json
with open('sampledata', 'r') as datafile:
data = json.loads(datafile.read())
print([item['id']['videoId'] for item in data['items']])
也许您可以尝试使用更多数据。
希望这有帮助。