J'essaie de mettre à jour le fichier Json existant, mais pour une raison quelconque, la valeur demandée n'est pas modifiée, mais l'ensemble des valeurs (avec la nouvelle valeur) est ajouté au fichier d'origine.
jsonFile = open("replayScript.json", "r+")
data = json.load(jsonFile)
tmp = data["location"]
data["location"] = "NewPath"
jsonFile.write(json.dumps(data))
et le résultat est: Obligatoire:
{
"location": "NewPath",
"Id": "0",
"resultDir": "",
"resultFile": "",
"mode": "replay",
"className": "",
"method": "METHOD"
}
Réel:
{
"location": "/home/karim/storm/project/storm/devqa/default.xml",
"Id": "0",
"resultDir": "",
"resultFile": "",
"mode": "replay",
"className": "",
"method": "METHOD"
}
{
"resultDir": "",
"location": "pathaaaaaaaaaaaaaaaaaaaaaaaaa",
"method": "METHOD",
"className": "",
"mode": "replay",
"Id": "0",
"resultFile": ""
}
Le problème ici est que vous avez ouvert un fichier et lu son contenu afin que le curseur se trouve à la fin du fichier. En écrivant dans le même descripteur de fichier, vous ajoutez essentiellement au fichier.
La solution la plus simple serait de fermer le fichier après l'avoir lu, puis de le rouvrir pour l'écrire.
with open("replayScript.json", "r") as jsonFile:
data = json.load(jsonFile)
tmp = data["location"]
data["location"] = "NewPath"
with open("replayScript.json", "w") as jsonFile:
json.dump(data, jsonFile)
Vous pouvez également utiliser seek()
pour déplacer le curseur au début du fichier, puis commencer à écrire, suivi de truncate()
= traiter le cas où les nouvelles données sont plus petites que les précédentes.
with open("replayScript.json", "r+") as jsonFile:
data = json.load(jsonFile)
tmp = data["location"]
data["location"] = "NewPath"
jsonFile.seek(0) # rewind
json.dump(data, jsonFile)
jsonFile.truncate()
def updateJsonFile():
jsonFile = open("replayScript.json", "r") # Open the JSON file for reading
data = json.load(jsonFile) # Read the JSON into the buffer
jsonFile.close() # Close the JSON file
## Working with buffered content
tmp = data["location"]
data["location"] = path
data["mode"] = "replay"
## Save our changes to JSON file
jsonFile = open("replayScript.json", "w+")
jsonFile.write(json.dumps(data))
jsonFile.close()