JSON格式在我附加文件时添加字符,但不是输出中的字符串
问题描述
我正在使用以下函数从 flickr API
获取 json
.它返回的字符串是格式正确的 JSON 块:
I am using the following function to get json
from the flickr API
. The string it returns is a properly formatted chunk of 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 写入缓存文件时,它会不断添加反斜杠,例如以下示例:
The issue I am having is that when I go to write the json to my cache file it keeps adding in backslashes, like this example:
"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":"美国辛辛那提","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},"用法":{"candownload":1,"canblog":0,"canprint":0,"canshare":1},"comments":{"_content":"0"},"notes":{"note":[]},"people":{"haspeople":0},"tags":{"tag":[{"id":"150538742-34869402493-5630","作者":"150544082@N05","作者名":"ankitrana_","raw":"cincinnati","_content":"cincinnati","machine_tag":0},{"id":"150538742-34869402493-226","作者":"150544082@N05","作者名":"ankitrana_","raw":"ohio","_content":"ohio","machine_tag":false},...等等等等}
如何在没有这些额外的 字符的情况下将 JSON 存储到现有文件中,就像我打印字符串时所表示的那样?
How can I store the JSON to the existing file without these additional characters, as it is represented when I print the string?
解决方案
使用 your_string.decode('string_escape')
将 "
转义为 "代码>
use your_string.decode('string_escape')
to unescape "
to "
更新:
你的字符串转义是因为 json.dumps()
,它将对象转换为字符串,然后你可以使用 json.loads()
读取它,结果未转义.
your string escaped because json.dumps()
, it convert object to string and later you can read it using json.loads()
, the result are unescaped.
你可以使用 str()
保存它而不使用斜线
you can save it without slash using str()
cache_file.write(str(CACHE_DICTION))
# {'myparam' :'"162000","photo":...'
但是它用单引号保存到文件的问题,它不是有效的 json 并且与 json.loads()
but the problem it save to file with single quotes, it not valid json and not compatible with json.loads()
我的建议保持您的代码如上,除非您想将其存储到文件 CACHE_FNAME.json
my suggestion keep your code as above, except you want to store it to file CACHE_FNAME.json
cache_file = open(CACHE_FNAME, 'w')
cache_file.write(response.text)
cache_file.close()
# {"photos":{"page":1,"pages":6478,..}
相关文章