Python JSON格式在追加文件时添加\个字符,但不在输出中添加到字符串
我使用以下函数从flickrPython JSON格式在追加文件时添加\个字符,但不在输出中添加到字符串,python,json,formatting,append,flickr,Python,Json,Formatting,Append,Flickr,我使用以下函数从flickrAPI获取json。它返回的字符串是格式正确的JSON块: 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 = param
API
获取json
。它返回的字符串是格式正确的JSON块:
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]
我遇到的问题是,当我将json写入缓存文件时,它会不断添加反斜杠,如下例所示:
”https://api.flickr.com/services/rest/format-json_method-flickr.photos.getInfo_photo_id-34869402493“:”{“photo\”:{“id\”:“34869402493\”,“secret\”:“56fcf0342c\”,“server\”:“4057\”,“farm\”:5,““DateUpload\”:“1499030213\”,“isfavorite\”:0,““license\”:“0\”,“安全级别”:“0\,“rotation\”,“rotation\”:0,““originalsecret\”:“c4d1d316ed\”,”原始格式\“:\“jpg\”,“所有者\:{\“nsid\”:\”150544082@N05\“,”用户名“:”ankitrana“,”realname“:”Ankit Rana“,”地点“:”美国辛辛那提“,”iconserver“:”4236“,”iconfarm“:”5,“路径别名“:”ankitrana“,”标题“:”{”内容“:”7“,”描述“:{”内容“:”,”可视性“:”家庭朋友“:”IS0”,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\“canprint\”:0,\“canshare”\“:1},\'comments\':{\'u content\':{\'0\',\'notes\':[]},\'people\':{\'haspeople\':0},\'tags\':{\'tag\':[{\'id\':\'150538742-34869402493-5630\',\'author\':\”150544082@N05\“,”authorname\“:”ankitrana\”,”raw\“:”辛辛那提\“,”内容\“:”辛辛那提\“,”机器标签\“:0},“{”id \“:”150538742-34869402493-226 \“,”作者\“:”150544082@N05\",\“authorname\”:“ankitrana\”,“raw\”:“ohio\”,“\u content\”:“ohio\”,“machine\u tag\”:false},
…等等等等}
如果没有这些额外的
\
字符,我如何将JSON存储到现有文件中,就像我打印字符串时所表示的那样?您可以尝试用python中的str.replace函数替换“\”
将代码添加到下一行之后
cache\u file=open(cache\u FNAME,“w”)
换一条线
cache_file.write(json.dumps(cache_DICTION))
到
cache_file.write(json_项)
让我知道这是否适用于您使用
您的\u字符串。解码('string\u escape')
到unescape\“
到”
更新:
您的字符串已转义,因为json.dumps()
,它将对象转换为字符串,以后您可以使用json.loads()
读取它,结果将不转义
您可以使用str()
但是它用单引号保存到文件中的问题是,它不是有效的json,并且与json.loads()不兼容
我的建议是将代码保存在上面,除非您希望将其存储到文件CACHE\u FNAME.json
cache_file = open(CACHE_FNAME, 'w')
cache_file.write(response.text)
cache_file.close()
# {"photos":{"page":1,"pages":6478,..}
只需将\
替换为空白即可。
我在使用JSON时也做了同样的事情
json_new = json.replace('\\', '')
请回答您的问题,这样我们就可以运行并重新创建问题了。这确实解决了问题,但我担心json包含合法反斜杠的情况。啊,很有意义,感谢您指出这一点。这可能会在将来对我有所帮助。您能给我更多关于这一点的信息吗?当我尝试使用响应文本然后使用decode它告诉我decode不能用于字符串。在转储之前,我尝试将json编码为UTF-8,但也没有成功。这似乎可以解决我的问题,但我仍然是编程新手,所以我不完全理解如何使用它。更新了答案,请参见上文。.decode('string_escape')
不需要,因为斜杠来自json.dumps()
这是一个令人困惑的答案。执行json.dumps(str(CACHE_DICTION))不会删除输出json中的反斜杠
cache_file = open(CACHE_FNAME, 'w')
cache_file.write(response.text)
cache_file.close()
# {"photos":{"page":1,"pages":6478,..}
json_new = json.replace('\\', '')