如何使用python打印完整的json数组?

时间:2016-02-26 10:12:09

标签: python json

我有一个json数组。并且需要使用python只打印id。我该怎么做?

这是我的json数组:

{
"messages":
  [
   {

   "id": "1531cf7d9e03e527",
   "threadId": "1531cf7d9e03e527"
   },

   {
   "id": "1531cdafbcb4a0e6",
   "threadId": "1531bfccfceb1ed7"
   }

 ],

 "nextPageToken": "01647645424797380808",

 "resultSizeEstimate": 103
}

*编辑:*

我实际上正在编写一个python代码来从gmail API获取消息。 该程序提供了gmail帐户的消息ID和线程ID。消息作为json格式。我只需要消息ID而不是线程ID。

from __future__ import print_function
import httplib2
import os

from apiclient import discovery
import oauth2client
from oauth2client import client
from oauth2client import tools
import json
try:
    import argparse
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
    except ImportError:
    flags = None


SCOPES = 'https://www.googleapis.com/auth/gmail.readonly'
CLIENT_SECRET_FILE = 'client_server.json'
APPLICATION_NAME = 'Gmail API Python Quickstart'

def get_credentials():

    home_dir = os.path.expanduser('~')
    credential_dir = os.path.join(home_dir, '.credentials')
    if not os.path.exists(credential_dir):
        os.makedirs(credential_dir)
    credential_path = os.path.join(credential_dir,
                                   'gmail-python-quickstart.json')

    store = oauth2client.file.Storage(credential_path)
    credentials = store.get()
    if not credentials or credentials.invalid:
        flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
        flow.user_agent = APPLICATION_NAME
        if flags:
            credentials = tools.run_flow(flow, store, flags)
        else: 
            credentials = tools.run(flow, store)
        print('Storing credentials to ' + credential_path)
    return credentials
def main():

    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    service = discovery.build('gmail', 'v1', http=http)
    message = service.users().messages().get(userId='me',id='').execute()
    response = service.users().messages().list(userId='me',q='').execute()
    messages = []
    if 'messages' in response:
      messages.extend(response['messages'])
      print(messages)

    result = loads(messages)
    ids = [message['id'] for message in result['messages']]
    print (ids)

    while 'nextPageToken' in response:
      page_token = response['nextPageToken']
      response = service.users().messages().list(userId='me', q='',pageToken=page_token).execute()
      messages.extend(response['messages'])
     print(message['id'])

    print (message['snippet'])



if __name__ == '__main__':
    main()

3 个答案:

答案 0 :(得分:3)

import json
dict_result = json.loads(your_json)
ids = [message['id'] for message in dict_result['messages']]

答案 1 :(得分:1)

由于我没有足够的声誉点来评论,我将此作为答案发布,否则 Andrey Rusanov的答案几乎是正确的。

所以,我复制了您发布的json并将其保存在名为 messages.json

的文件中
{   "messages": [ 
        {"id": "1531cf7d9e03e527", "threadId": "1531cf7d9e03e527" },
        { "id": "1531cdafbcb4a0e6", "threadId": "1531bfccfceb1ed7" }
    ],
    "nextPageToken": "01647645424797380808",
    "resultSizeEstimate": 103 
}

现在,只打印ID:

from json import load
result = load(open("messages.json"))
ids = [message['id'] for message in result['messages']]

如果您的json不在文件中并且可以作为字符串使用,

from json import loads
json_string = """
 {   "messages": [ 
        {"id": "1531cf7d9e03e527", "threadId": "1531cf7d9e03e527" },
        { "id": "1531cdafbcb4a0e6", "threadId": "1531bfccfceb1ed7" }
    ],
    "nextPageToken": "01647645424797380808",
    "resultSizeEstimate": 103 
}
"""
result = loads(json_string)
ids = [message['id'] for message in result['messages']]

答案 2 :(得分:1)

messages=[]
store=[]
if 'messages' in response:
 messages.extend(response['messages'])
for i in range(len(messages)):
 //to store the id alone (Taking the id from the json array)
 store=messages[i]['id']  
 //retrieve messages of this id
 message = service.users().messages().get(userId='me',id=store).execute()
 print(store)