Formato JSON agregando \ caracteres cuando agrego el archivo, pero no a la cadena en la salida

Estoy usando la siguiente función para obtener json de la API flickr. La cadena que devuelve es un fragmento de JSON con el formato correcto:

 def get_photo_data(photo_id): para = {} para["photo_id"] = photo_id para["method"] = "flickr.photos.getInfo" para["format"] = "json" para["api_key"] = FLICKR_KEY request_data = params_unique_combination("https://api.flickr.com/services/rest/", para) if request_data in CACHE_DICTION: return CACHE_DICTION[request_data] else: response = requests.get("https://api.flickr.com/services/rest/", para) CACHE_DICTION[request_data] = response.text[14:-1] cache_file = open(CACHE_FNAME, 'w') cache_file.write(json.dumps(CACHE_DICTION)) cache_file.close() return response.text[14:-1] 

El problema que tengo es que cuando voy a escribir el json en mi archivo de caché, sigue agregando barras invertidas, como este ejemplo:

"https://api.flickr.com/services/rest/format-json_method-flickr.photos.getInfo_photo_id-34869402493": "{\"photo\":{\"id\":\"34869402493\",\"secret\":\"56fcf0342c\",\"server\":\"4057\",\"farm\":5,\"dateuploaded\":\"1499030213\",\"isfavorite\":0,\"license\":\"0\",\"safety_level\":\"0\",\"rotation\":0,\"originalsecret\":\"c4d1d316ed\",\"originalformat\":\"jpg\",\"owner\":{\"nsid\":\"150544082@N05\",\"username\":\"ankitrana_\",\"realname\":\"Ankit Rana\",\"location\":\"Cincinnati, USA\",\"iconserver\":\"4236\",\"iconfarm\":5,\"path_alias\":\"ankitrana_\"},\"title\":{\"_content\":\"7\"},\"description\":{\"_content\":\"\"},\"visibility\":{\"ispublic\":1,\"isfriend\":0,\"isfamily\":0},\"dates\":{\"posted\":\"1499030213\",\"taken\":\"2017-06-19 13:43:38\",\"takengranularity\":\"0\",\"takenunknown\":\"0\",\"lastupdate\":\"1499041020\"},\"views\":\"41\",\"editability\":{\"cancomment\":0,\"canaddmeta\":0},\"publiceditability\":{\"cancomment\":1,\"canaddmeta\":0},\"usage\":{\"candownload\":1,\"canblog\":0,\"canprint\":0,\"canshare\":1},\"comments\":{\"_content\":\"0\"},\"notes\":{\"note\":[]},\"people\":{\"haspeople\":0},\"tags\":{\"tag\":[{\"id\":\"150538742-34869402493-5630\",\"author\":\"150544082@N05\",\"authorname\":\"ankitrana_\",\"raw\":\"cincinnati\",\"_content\":\"cincinnati\",\"machine_tag\":0},{\"id\":\"150538742-34869402493-226\",\"author\":\"150544082@N05\",\"authorname\":\"ankitrana_\",\"raw\":\"ohio\",\"_content\":\"ohio\",\"machine_tag\":false}, ... etc., etc.}

¿Cómo puedo almacenar el JSON en el archivo existente sin estos \ caracteres adicionales, como se representa cuando imprimo la cadena?

Related of "Formato JSON agregando \ caracteres cuando agrego el archivo, pero no a la cadena en la salida"

use your_string.decode('string_escape') para deseleccionar \" a "

actualizar:

su cadena se escapó porque json.dumps() , convierte el objeto en una cadena y luego puede leerlo utilizando json.loads() , el resultado no se ha escapado.

puedes guardarlo sin barra oblicua usando str()

 cache_file.write(str(CACHE_DICTION)) # {'myparam' :'"162000","photo":...' 

pero el problema se guarda en un archivo con comillas simples, no es válido json y no es compatible con json.loads()

Mi sugerencia es mantener su código como se indica arriba, excepto que desea almacenarlo en el archivo CACHE_FNAME.json

 cache_file = open(CACHE_FNAME, 'w') cache_file.write(response.text) cache_file.close() # {"photos":{"page":1,"pages":6478,..} 

Puedes intentar reemplazar el “\” con la función str.replace en python

Agregue el código después de la siguiente línea

cache_file = abierto (CACHE_FNAME, ‘w’)

 json_item = str(json.dumps(CACHE_DICTION)) json_item.replace("\", "") 

y cambia esta linea

cache_file.write (json.dumps (CACHE_DICTION))

a

cache_file.write (json_item)

Hazme saber si esto funciona para ti

simplemente reemplazar \ con un espacio en blanco. Hice lo mismo mientras trabajaba con JSON.

 json_new = json.replace('\\', '')