簡體   English   中英

當字符串包含正則表達式時,Python 編碼特殊的 JSON 字符?

[英]Python Encode Special JSON characters when string contain regex?

有誰知道讓 json.dumps 正確編碼包含正則表達式的字符串的方法? 或者,是否有另一種方法可以為不使用 json.dumps 的 JSON 有效負載編碼數據來正確處理此問題?

例如:

import json
MyString = 'regex "Network\sInformation:[\s\S]+?Workstation\sName:\t+(?<src_host>[^\r]+)"'
data = {}
data['MyString'] = MyString
data['date'] = '2017-09-18T11:28:06'  
json_data = json.dumps(data)
print json_data

會產生:

{
    "date": "2017-09-18T11:28:06", 
    "MyString": "regex \"Network\\sInformation:[\\s\\S]+?Workstation\\sName:\t+(?<src_host>[^\r]+)\""
}

但是,您會注意到[^\\r]沒有正確轉義,應該是[^\\\\r] ,當由 API 處理時會導致解析錯誤。

最后,我在這里構建的 JSON 負載將使用請求提交到 Web API,類似於:

requests.post(url, auth=(uname, passwd), data=json_data, headers=headers)

注意:我已經考慮過簡單地創建一個函數來發出一堆替換命令來自己手動編碼,這是我目前的計划 B,但我希望已經有一個解決方案/模塊可以用來做這個。

您的正則表達式定義有缺陷,而不是 JSON 輸出:

>>> MyString = 'regex "Network\sInformation:[\s\S]+?Workstation\sName:\t+(?<src_host>[^\r]+)"'
>>> MyString[-5:-4]
'\r'
>>> len(MyString[-5:-4])
1
>>> print(MyString[-5:-4])  # produces an empty line

您定義了回車符,而不是單獨的反斜杠和r字符; Python 將兩者解釋為轉義序列。 JSON 然后也用\\r對該回車進行編碼:

>>> import json
>>> chr(13)  # ASCII code 13 is a carriage return
'\r'
>>> print(json.dumps(chr(13)))
"\r"

改用原始字符串文字:

MyString = r'regex "Network\sInformation:[\s\S]+?Workstation\sName:\t+(?<src_host>[^\r]+)"'

現在你有兩個單獨的字符, \\r

>>> MyString = r'regex "Network\sInformation:[\s\S]+?Workstation\sName:\t+(?<src_host>[^\r]+)"'
>>> MyString[-6:-4]
'\\r'
>>> len(MyString[-6:-4])
2
>>> print(MyString[-6:-4])
\r

並且這兩個字符產生您預期的 JSON 輸出:

>>> import json
>>> print(json.dumps(MyString))
"regex \"Network\\sInformation:[\\s\\S]+?Workstation\\sName:\\t+(?<src_host>[^\\r]+)\""

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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