[英]Python: Preventing json.load(file) from stripping escape characters
[英]Python (json.load) to set value to a string missing escape characters
我正在解析具有以下數據子集的 json 文件。
"title": "Revert \"testcase for check\""
在我的 python 腳本中,我執行以下操作:
with open('%s/staging_area/pr_info.json' % cwd) as data_file:
pr_info = json.load(data_file)
pr_title=pr_info["title"]
從 json object 獲取標題后,pr_title 將包含以下信息。
Revert "testcase for check"
似乎轉義字符 \ 不是字符串分配的一部分。 有沒有辦法保留整個字符串,包括轉義字符? 太感謝了!
如果你真的需要它,你應該用 json 再次轉義它並刪除第一個和最后一個引號:
pr_title = json.dumps(pr_title)[1:-1]
但轉義字符適用於 escaping,字符串的原始值仍然是Revert "testcase for check"
。 所以 escaping function 將取決於您的數據應用的位置(DB、HTML、Z3501BB093D3693810B86710 等)。
為了解釋[1:-1]
, dumps
原始字符串轉義為 JSON 有效,它添加\
並用引號括住字符串"
。您必須從結果字符串中刪除這些引號。因為 Python 可以使用與列表相同的字符串您可以使用[1:-1]
獲取從第二個到倒數第二個的所有字母,它從字面上刪除了第一個和最后一個引號:
print(pr_title)
>>> "Revert \"testcase for check\""
print(pr_title[1:-1])
>>> Revert \"testcase for check\"
如果您確實需要維護轉義字符,則必須在讀取文件后和解析 JSON 之前立即轉義轉義字符。
with open('%s/staging_area/pr_info.json' % cwd) as data_file:
raw_data_file = data_file.read().replace("\\", "\\\\\\")
pr_info = json.JSONDecoder().decode(raw_data_file)
那么pr_title
應該仍然有原始的轉義字符。
正在發生的事情是:
raw_data_file
現在是一個字符串而不是文件指針,所以我們不能使用 json.load()。 但是來自 json.JSONDecoder 的方法decode承認字符串輸入。如果您的目標是打印 pr_title,那么您可能可以使用 json.dumps() 來打印原始文本。
>>> import json
>>> j = '{"name": "\"Bob\""}'
>>> print(j)
{"name": ""Bob""}
>>> json.dumps(j)
'"{\\"name\\": \\"\\"Bob\\"\\"}"'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.