Tengo un archivo json (~ 3Gb) que necesito cargar en mongodb. Algunas de las teclas json contienen a. (punto), que hace que la carga en mongodb falle. Quiero cargar el archivo json y editar los nombres de las teclas en el proceso, por ejemplo, reemplazar el punto con un espacio vacío. Usando el siguiente código Python¿Cómo puedo editar/cambiar el nombre de las claves durante json.load en python?
import json
def RemoveDotKey(dataPart):
for key in dataPart.iterkeys():
new_key = key.replace(".","")
if new_key != key:
newDataPart = deepcopy(dataPart)
newDataPart[new_key] = newDataPart[key]
del newDataPart[key]
return newDataPart
return dataPart
new_json = json.loads(data, object_hook=RemoveDotKey)
El object_hook llama RemoveDotKey debe iterar sobre todas las llaves, una llave que contiene un punto, crear una copia, sustituir el punto por un espacio, y devolver la copia. Creé una copia de dataPart, ya que no estoy seguro si puedo iterar sobre las claves de dataPart e insertar/eliminar pares de valores clave al mismo tiempo.
Parece que hay un error aquí, todas las teclas json con un punto en ellas no se están editando. No estoy muy seguro de cómo funciona json.load. También soy nuevo en Python (estado usando durante menos de una semana)
¿No es ese el código que va a tener problemas para actualizar el diccionario mientras lo itera? Hubiera pensado que necesitabas hacer una lista de teclas en lugar de usar 'iterkeys()' – Duncan
Hmm, tienes razón, he actualizado el código. –
No crear copias profundas de obj acelera significativamente el proceso de carga json, y reemplazar las iterkeys() con las teclas() es la clave. Gracias Ned, Duncan. – okaytee