Erzeugt eine dynamische verschachtelte JSON-Objekt-und array - python

Als die Frage erklärt das problem, das ich versucht habe zu erzeugen verschachtelte JSON-Objekt. In diesem Fall habe ich for loops abrufen der Daten aus dem Wörterbuch dic. Unten ist der 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("}")

Erwartete Ausgabe ist:

{
"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
}]
}

Aber derzeit bin ich immer eine Ausgabe wie nachfolgend:

{
"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
}]
}

Bitte helfen, ich habe versucht, es zu lösen, scheiterte aber. Bitte nicht markieren, duplizieren, da habe ich bereits überprüft, andere Antworten und überhaupt keine Hilfe.

Edit 1:
Die Eingabe ist im Grunde genommen aus einem Wörterbuch dic deren mapping-Typ ist <String, List>
zum Beispiel: "irritation" => [1,3,5,7,8]
wo der Reizung ist der Schlüssel, und die zugeordneten, um eine Liste von Seitenzahlen.
Dies ist im Grunde Lesen Sie in der äußeren for-Schleife, wo der Schlüssel ist das Schlüsselwort und Wert ist eine Liste von Seiten der vorkommen des Schlüsselworts.

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
wenn es eine richtig gebildet json Datei, die Sie verwenden könnten, die json Modul, statt Sie zu importieren als text. Können Sie jedes detail Ihrer input-Datei?
Eingang ist ein langer Prozess, ich werde Bearbeiten Sie die Antwort mit der Abstraktion von der die Eingabe
Warum nicht Sie json verwenden.dump und aktualisieren Sie dann das JSON-Objekt als mehr Daten ankommen?
Nun, es ist ein schönes, einfaches Bibliothek namens json (pip-Installation ist nicht erforderlich ), verwenden Sie import json; print json.dumps(dic) und chill
mit dieser Bibliothek, wie funktioniert es, das problem zu lösen, könnten Sie bitte teilen Sie ein code-snippet? @ZdaR

InformationsquelleAutor Asif Ali | 2017-02-13

Schreibe einen Kommentar