在Python中打印JSON文件的特定值?

时间:2018-06-12 20:42:37

标签: python json

我正在尝试在我从网址收到的json文件中打印特定值。这就是它的外观。

{
 "kind": "youtube#commentThreadListResponse",
 "etag": "\"DuHzAJ-eQIiCIp7p4ldoVcVAOeY/x4kLMXLeETwGloVtDwToLvzwO-w\"",
 "pageInfo": {
  "totalResults": 1,
  "resultsPerPage": 20
 },
 "items": [
  {
   "kind": "youtube#commentThread",
   "etag": "",
   "id": "",
   "snippet": {
    "videoId": "",
    "topLevelComment": {
     "kind": "youtube#comment",
     "etag": "",
     "id": "",
     "snippet": {
      "authorDisplayName": "",
      "authorProfileImageUrl": "",
      "authorChannelUrl": "",
      "authorChannelId": {
       "value": ""
      },
      "videoId": "",
      "textDisplay": "ads",
      "textOriginal": "ads",
      "canRate": true,
      "viewerRating": "none",
      "likeCount": 0,
      "publishedAt": "2018-06-12T20:17:47.000Z",
      "updatedAt": "2018-06-12T20:17:47.000Z"
     }
    },
    "canReply": true,
    "totalReplyCount": 0,
    "isPublic": true
   }
  }
 ]
}

这是我的代码:

import requests
url = "url to the request"
r = requests.get(url)
print(r.json())

打印整个json文件,但我希望它只打印“id”。有谁知道我能做到吗?我一直在寻找各处,摸不着头脑。

2 个答案:

答案 0 :(得分:0)

r.json()将创建一个json对象,然后您可以像python中的字典一样进行寻址。所以,如果你做了以下

obj = r.json();
print(obj["kind"])

会给你

youtube#commentThreadListResponse"

您可以通过相同的方式在层次结构中向下导航

obj["items"][0] 

将是遍历对象的有效方式

答案 1 :(得分:0)

如果要在结构中任何位置递归包含的每个字典中打印每个id值,则需要递归遍历结构:

def print_ids(d):
    if isinstance(d, list):
        for elem in d:
            print_ids(elem)
    elif isinstance(d, dict):
        for key, value in d.items():
            if key == 'id':
                print(f'found an id: {value}')
            print_ids(value)

如果你想要一个特定的id,一旦你可以解释如何用英语找到它,你应该能够将它转换为Python。例如,如果您希望id内的每个字典中的每个items,而不是其他地方的其他ids

  • d['items']是最高级别的items代码列表。
  • for item in d['items']是该列表中的每个item字典。
  • item['id']是该词典的id成员。

所以:

def print_ids(d):
    for item in d['items']:
        print(item['id'])