TypeError:字符串索引必须是整数//在python中使用JSON作为dict

时间:2017-05-30 18:06:08

标签: python json dictionary youtube typeerror

好的,所以在过去的两天里我一直在为此而奋斗,没有真正的进步。我是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"
   }
  }
 ]
}

您需要提供哪些其他信息才能了解问题?

3 个答案:

答案 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']])

也许您可以尝试使用更多数据。

希望这有帮助。