Générer une dynamique de imbriquée objet JSON et de la matrice de python

Que la question explique le problème, j'ai essayé de générer imbriquée objet JSON. Dans ce cas, j'ai for boucles d'obtenir les données de dictionnaire dic. Ci-dessous le code:

f = open("test_json.txt", 'w')
flag = False
temp = ""
start = "{\n\t\"filename\"" + " : \"" +initial_filename+"\",\n\t\"data\"" +" : " +" [\n"
end = "\n\t]" +"\n}"
f.write(start)
for i, (key,value) in enumerate(dic.iteritems()):
    f.write("{\n\t\"keyword\":"+"\""+str(key)+"\""+",\n")
    f.write("\"term_freq\":"+str(len(value))+",\n")
    f.write("\"lists\":[\n\t")
    for item in value:
        f.write("{\n")
        f.write("\t\t\"occurance\" :"+str(item)+"\n")
        #Check last object
        if value.index(item)+1 == len(value):
            f.write("}\n" 
            f.write("]\n")
        else:
            f.write("},") # close occurrence object
    # Check last item in dic
    if i == len(dic)-1:
        flag = True
    if(flag):
        f.write("}")
    else:
        f.write("},") #close lists object
        flag = False 

#check for flag
f.write("]") #close lists array 
f.write("}")

Sortie attendue est:

{
"filename": "abc.pdf",
"data": [{
    "keyword": "irritation",
    "term_freq": 5,
    "lists": [{
        "occurance": 1
    }, {
        "occurance": 1
    }, {
        "occurance": 1
    }, {
        "occurance": 1
    }, {
        "occurance": 2
    }]
}, {
    "keyword": "bomber",
    "lists": [{
        "occurance": 1
    }, {
        "occurance": 1
    }, {
        "occurance": 1
    }, {
        "occurance": 1
    }, {
        "occurance": 2
    }],
    "term_freq": 5
}]
}

Mais actuellement, je suis sortie comme ci-dessous:

{
"filename": "abc.pdf",
"data": [{
    "keyword": "irritation",
    "term_freq": 5,
    "lists": [{
        "occurance": 1
    }, {
        "occurance": 1
    }, {
        "occurance": 1
    }, {
        "occurance": 1
    }, {
        "occurance": 2
    },]                // Here lies the problem "," before array(last element)
}, {
    "keyword": "bomber",
    "lists": [{
        "occurance": 1
    }, {
        "occurance": 1
    }, {
        "occurance": 1
    }, {
        "occurance": 1
    }, {
        "occurance": 2
    },],                  // Here lies the problem "," before array(last element)
    "term_freq": 5
}]
}

S'il vous plaît aider, j'ai essayer de le résoudre, mais a échoué. Merci de ne pas marquer en double, puisque j'ai déjà vérifié les autres réponses et n'aide pas du tout.

Edit 1:
L'entrée est essentiellement prises à partir d'un dictionnaire dic dont le type de projection est <String, List>
par exemple: "l'irritation" => [1,3,5,7,8]
d'où l'irritation est la clé, et associée à une liste de numéros de page.
C'est essentiellement la lecture à l'extérieur pour la boucle où la clé est le mot clé et la valeur est une liste de pages d'occurrence de ce mot clé.

Edit 2:

dic = collections.defaultdict(list) # declaring the variable dictionary
dic[key].append(value) # inserting the values - useless to tell here
for key in dic:
    # Here dic[x] represents list - each value of x
    print key,":",dic[x],"\n" #prints the data in dictionary
si elle est correctement formé json fichier, vous pouvez utiliser le json module plutôt que de les importer en tant que texte. Pouvez-vous donner des détails de votre fichier d'entrée?
l'entrée est un processus long, je vais modifier la réponse de l'abstraction de l'entrée
Pourquoi ne pas utiliser json.vidage et ensuite mettre à jour l'objet JSON en plus de données arrive?
Eh bien, il est simple et agréable, bibliothèque appelée json (pip install pas nécessaire ), utilisez import json; print json.dumps(dic) et le froid
à l'aide de la bibliothèque, comment permet-il de résoudre le problème, pourriez-vous s'il vous plaît partager un extrait de code? @ZdaR

OriginalL'auteur Asif Ali | 2017-02-13