代码之家  ›  专栏  ›  技术社区  ›  M. Stag

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

  •  2
  • M. Stag  · 技术社区  · 7 年前

    我使用以下函数获取 json 来自flickr API 。返回的字符串是格式正确的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]
    

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

    如果没有这些附加信息,我如何将JSON存储到现有文件中 \

    3 回复  |  直到 7 年前
        1
  •  1
  •   ewwink    7 年前

    your_string.decode('string_escape') 取消景观 \" "

    更新:

    您的字符串已转义,因为 json.dumps() ,它将对象转换为字符串,稍后您可以使用 json.loads() ,结果是不可回避的。

    您可以使用 str()

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

    但是它用单引号保存到文件中的问题是,它不是有效的json,并且与

    我的建议是,保留上述代码,除非您想将其存储到文件中 CACHE_FNAME.json

    cache_file = open(CACHE_FNAME, 'w')
    cache_file.write(response.text)
    cache_file.close()
    # {"photos":{"page":1,"pages":6478,..}
    
        2
  •  0
  •   O Grant    7 年前

    您可以尝试在python中用str.replace函数替换“\”

    在下一行后添加代码

    cache\u file=打开(cache\u FNAME,“w”)

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

    cache\u file.write(json\u项)

        3
  •  0
  •   realpac    7 年前

    \ 带有空格。 我在使用JSON时做了同样的事情。

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