2017-08-08 1 views
0

OK Les gars, je suis tout nouveau sur Python.Sortie Python vers JSON valide à partir d'une boucle FOR

J'ai commencé à l'utiliser au travail pour interroger AWS avec Boto3

Ma première tâche est de construire un script pour interroger les utilisateurs dans AWS avec MFA, le script initial fonctionne et retourne tous les utilisateurs qui ne disposent pas d'un MFA Device, assez simple vraiment. Ce que je veux faire est d'exporter la liste dans un fichier JSON afin que je puisse consommer les données dans une application Angular pour afficher le rapport.

Lorsque j'exécute le code, j'obtiens une sortie JSON mais c'est incorrect, il manque la virgule et ferme le JSON après chaque objet au lieu de créer une sortie JSON singulière complète.

Mon code est le suivant:

import json 
# boto code here 

for user in iam.list_users()['Users']: 
    mfa = iam.list_mfa_devices(UserName=user['UserName']) 
    if len(mfa['MFADevices']) == 0: 
     q = [] 

     q.append({"account": item['alias'], "Username": 
user['UserName'], "MFA": "No MFA Enabled"}) 
     print json.dumps(q, indent=4) 

format Le résultat est:

[ 
    { 
    "Username": "Username", 
    "MFA": "No MFA Enabled", 
    "account": "account" 
    } 
] 
[ 
    { 
    "Username": "Username", 
    "MFA": "No MFA Enabled", 
    "account": "account" 
    } 
] 

Répondre

1

Il y a beaucoup de valides JSON-formats. L'un d'eux est une liste avec les dictionnaires:

[{}, {}]

Je vous suggère d'essayer ceci:

import json 
# boto code here 
q = [] 
for user in iam.list_users()['Users']: 
    mfa = iam.list_mfa_devices(UserName=user['UserName']) 
    if len(mfa['MFADevices']) == 0: 
     q.append({"account": item['alias'], "Username": 
user['UserName'], "MFA": "No MFA Enabled"}) 

print json.dumps(q, indent=4) 
+0

Presque travaillé, mais semble être en train de dupliquer et de multiplier les résultats créatin ga énorme liste –

+0

@MatthewWhite Hmm pouvez-vous partager certaines des données dans iam.list_users() ['Users'] –

+0

Je crains que je ne peux pas, mais je pense qu'il fonctionne réellement, fondamentalement mon script assume des rôles dans AWS et passe par plusieurs comptes, il retourne ensuite les résultats pour chaque compte, donc il ferme les objets json pour chaque compte, donc je crois que votre solution fonctionne, merci –

0

Presque travaillé, mais semble faire double emploi et multiplier les résultats créant une énorme liste

[ 
{ 
    "Username": "Username", 
    "MFA": "No MFA Enabled", 
    "account": "Account" 
} 
] 
[ 
{ 
    "Username": "Username", 
    "MFA": "No MFA Enabled", 
    "account": "Account" 
}, 
{ 
    "Username": "Username", 
    "MFA": "No MFA Enabled", 
    "account": "Account" 
} 
] 
[ 
    { 
    "Username": "Username", 
    "MFA": "No MFA Enabled", 
    "account": "Account" 
    }, 
    { 
    "Username": "Username", 
    "MFA": "No MFA Enabled", 
    "account": "Account" 
    }, 
    { 
    "Username": "Username", 
    "MFA": "No MFA Enabled", 
    "account": "Account" 
    } 
] 
[ 
    { 
    "Username": "Username", 
    "MFA": "No MFA Enabled", 
    "account": "Account" 
    }, 
    { 
    "Username": "Username", 
    "MFA": "No MFA Enabled", 
    "account": "Account" 
    }, 
    { 
    "Username": "Username", 
    "MFA": "No MFA Enabled", 
    "account": "Account" 
    }, 
    { 
    "Username": "Username", 
    "MFA": "No MFA Enabled", 
    "account": "Account" 
    } 
]