簡體   English   中英

將日志文件轉義為 json 字符串,用於使用 Python 調用 REST

[英]Escape log file as a json string for use in REST call using Python

我有一個日志文件,其中包含需要 escaping、引號、雙引號、正斜杠和反斜杠、URL、其他 json 的各種字符。

我想將此文件作為 JSON 格式的 REST 請求的一部分發送,如何轉義 Python 格式的文件以准備傳輸。

我的文件示例:

(12/5/2020 8:20:39 PM) My Project: Log directory created
(12/5/2020 8:20:43 PM) My Project: SF auth result: {vOPDetail,},{vOPResponseCode,},{vOPState,success},{vOutputToken,00D4W},{vOpResponseBody,},{vOPType,},{vOPInstanceUrl,https://test.my.salesforce.com}
(12/5/2020 8:20:43 PM) My Project: Token: "00D4W0000"
(12/5/2020 8:20:43 PM) My Project: URL: https://test.my.salesforce.com

我的 REST 調用如下所示:

PATCH https://test.my.salesforce.com/services/data/v49.0/sobjects/My_Object/a2P4W00000272ujUAA

Body

{
    "My_Namespace__My_Object__c" : "$Log$"
}

其中 $Log$ 是日志文件的位置 go

實際的 REST 調用是另一種語言,我只需要 PYTHON 轉義日志文件以准備傳輸。 這是我嘗試過但不起作用的方法:

import json
def EscapeJSONString(input):
    return json.dumps(input)

這里的輸入完全是使用不同語言讀取的日志文件,由於我的情況,我無法轉義其他語言的日志文件,我可以按原樣讀取。

另一種語言只需調用此 python function EscapeJSONString 並提供日志作為輸入,然后將 output 保存到變量中。

從一種語言跳到另一種只是為了逃避一個字符串聽起來不是最好的解決方案。 以這種方式傳輸大型日志文件似乎也非常低效,為什么不跳過 REST 進行此特定調用並發出 HTTP 請求以獲取原始格式的日志。

但是,如果您想這樣做, json.dumps()會執行您需要將字符串變量作為值的 escaping ,因此您可以像這樣構建整個 json :

import json
def EscapeJSONString(input):
    return json.dumps({"My_Namespace__My_Object__c": input})

很難說出這里的input是什么,但你需要提到這個 function 是如何實際執行的,因為如果直接在 Python 中讀取文件內容確實會正確轉義

注意:正斜杠和括號不需要轉義

>>> import json
>>> with open('/tmp/data.txt') as f:
...     print(json.dumps({"log": f.read()}))
... )
...
{"log": "(12/5/2020 8:20:39 PM) My Project: Log directory created\n(12/5/2020 8:20:43 PM) My Project: SF auth result: {vOPDetail,},{vOPResponseCode,},{vOPState,success},{vOutputToken,00D4W},{vOpResponseBody,},{vOPType,},{vOPInstanceUrl,https://test.my.salesforce.com}\n(12/5/2020 8:20:43 PM) My Project: Token: \"00D4W0000\"\n(12/5/2020 8:20:43 PM) My Project: URL: https://test.my.salesforce.com\n"}

假設input是一個字符串,那么您將返回一個字符串,而不是 HTTP 主體的 JSON object

暫無
暫無

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

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