1

I have a json array. And need to print only the id using python .How do i do it ?

This is my json array :

{
"messages":
  [
   {

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

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

 ],

 "nextPageToken": "01647645424797380808",

 "resultSizeEstimate": 103
}

*EDIT : *

I am actually writing a python code to get messages from the gmail API. This program gives the message ids and thread ids of a gmail accounts' messages as a json format. I only need the message id and not the thread 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()

2 Answers 2

3
import json
dict_result = json.loads(your_json)
ids = [message['id'] for message in dict_result['messages']]
Sign up to request clarification or add additional context in comments.

2 Comments

TypeError : expected string or buffer .. it gives me raw_decode() error @andrey
It seems you pass python list instead of JSON string(like you said in answer). If so, just skip part with json.loads and make list iterator on your list. [message['id'] for message in your_parsed_json['messages']] in your case
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) 

1 Comment

Please add some description to the solution you propose.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.