2014-04-16 1 views
6

Sono nuovo di Python e sto giocando con i dati JSON. Vorrei recuperare i dati JSON da un file e aggiungere a quei dati un valore-chiave JSON "al volo".Come aggiungere un valore-chiave ai dati JSON recuperati da un file con Python?

Cioè, il mio json_file contiene i dati JSON come-come il seguente:

{"key1": {"key1A": ["value1", "value2"], "key1B": {"key1B1": "value3"}}} 

vorrei aggiungere la parte "ADDED_KEY": "ADDED_VALUE" valore-chiave per i dati di cui sopra in modo da utilizzare il seguente JSON nel mio script:

{"ADDED_KEY": "ADDED_VALUE", "key1": {"key1A": ["value1", "value2"], "key1B": {"key1B1": "value3"}}} 

sto cercando di scrivere qualcosa di simile a quanto segue al fine di realizzare quanto sopra:

import json 

json_data = open(json_file) 
json_decoded = json.load(json_data) 

# What I have to make here?! 

json_data.close() 

risposta

9

L'oggetto json_decoded è un dizionario Python; si può semplicemente aggiungere la chiave per questo, poi ri-codificare e riscrivere il file:

import json 

with open(json_file) as json_file: 
    json_decoded = json.load(json_file) 

json_decoded['ADDED_KEY'] = 'ADDED_VALUE' 

with open(json_file, 'w') as json_file: 
    json.dump(json_decoded, json_file) 

ho usato gli oggetti file aperto come contesto manager qui (con l'istruzione with) in modo Python si chiude automaticamente il file quando fatto.

2

Si può fare

json_decoded['ADDED_KEY'] = 'ADDED_VALUE' 

O

json_decoded.update({"ADDED_KEY":"ADDED_VALUE"}) 

che funziona bene se si desidera aggiungere più di una chiave/coppia di valori.

Ovviamente, è possibile verificare innanzitutto l'esistenza di ADDED_KEY, a seconda delle esigenze.

e presumo che si desidera potrebbe desiderare di salvare i dati al file

json.dump(json_decoded, open(json_file,'w')) 
+0

Come verificare l'esistenza di ADDED_KEY? – Backo

+0

Il mio approccio dipenderebbe da cosa volevo fare se esistesse. Come vorresti gestirlo se la chiave fosse già esistente? – bsoist

+0

Vorrei sovrascrivere il valore JSON esistente. Tuttavia, per mia curiosità, mi interessa anche "sollevare" un errore se la chiave JSON esiste e gestire il caso di "annidamento". – Backo

3

JSON restituito da json.loads() si comportano proprio come nativi liste python/dizionari:

import json 

with open("your_json_file.txt", 'r') as f: 
    data = json.loads(f.read()) #data becomes a dictionary 

#do things with data here 
data['ADDED_KEY'] = 'ADDED_VALUE' 

#and then just write the data back on the file 
with open("your_json_file.txt", 'w') as f: 
    f.write(json.dumps(data, sort_keys=True, indent=4, separators=(',', ': '))) 
#I added some options for pretty printing, play around with them! 

Per maggiori informazioni controlla the official doc