簡體   English   中英

Python (json.load) 將值設置為缺少轉義字符的字符串

[英]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應該仍然有原始的轉義字符。


正在發生的事情是:

  1. 將每個反斜杠替換為三個反斜杠:原始轉義字符 (\) + 轉義轉義字符(\\)。
  2. raw_data_file現在是一個字符串而不是文件指針,所以我們不能使用 json.load()。 但是來自 json.JSONDecoder 的方法decode承認字符串輸入。
  3. 解碼器將解析 JSON 字符串並刪除轉義的轉義字符,同時保留文件中的原始字符。

如果您的目標是打印 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM