JSON 格式在附加文件时添加 \ 字符,但不在输出中添加字符串 [英] JSON formatting adding \ characters when I append file, but not to string in output

查看:29
本文介绍了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\",\"秘密\":\"56fcf0342c\",\"服务器\":\"4057\",\"农场\":5,\"上传日期\":\"1499030213\",\"isfavorite\":0,\"license\":\"0\",\"safety_level\":\"0\",\"rotation\":0,\"originalsecret\":\"c4d1d316ed\",\"原始格式\":\"jpg\",\"所有者\":{\"nsid\":\"150544082@N05\",\"用户名\":\"ankitrana_\",\"真实姓名\":\"Ankit Rana\",\"location\":\"Cincinnati, USA\",\"iconserver\":\"4236\",\"iconarm\":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()

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,..}

这篇关于JSON 格式在附加文件时添加 \ 字符,但不在输出中添加字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆