Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python JSON格式在追加文件时添加\个字符,但不在输出中添加到字符串_Python_Json_Formatting_Append_Flickr - Fatal编程技术网

Python JSON格式在追加文件时添加\个字符,但不在输出中添加到字符串

Python 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

我使用以下函数从flickr
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('\\', '')