如何寫程式來轉義 JSON 字串中的雙引號

如何寫程式來轉義 JSON 字串中的雙引號

我必須保持高效,所以我不能使用類似jq載入大型二進位執行檔的工具。我只是想轉義字串中的雙引號,這樣對於 JSON 來說是安全的。這還不夠好:

echo ' bad \"  string"' | sed 's/"/\\"/g' 

因為它會轉義已經轉義的雙引號。有沒有辦法僅在雙引號尚未轉義時替換它們?

答案1

想必您只想轉義,"除非它前面有\.

echo ' bad \"  string"' | sed -E 's/([^\]|^)"/\1\\"/g'

解釋

這將匹配",但前提是它前面是[^\],即“除\”之外的任何字元(或行的開頭^)。但是,由於這個新字元將被自身替換,因此我們需要將其捕獲到捕獲組中(),然後再次用匹配項替換它\1。在此範例中,為了簡單起見,我使用了擴展正規表示式-E

答案2

$ echo ' bad \"  string"' | perl -pe 's/(?<!\\)"/\\\"/g'
 bad \"  string\"
$ echo ' bad \"  string" """""""""' | perl -pe 's/(?<!\\)"/\\\"/g'
 bad \"  string\" \"\"\"\"\"\"\"\"\"
$ echo ' bad \"  string" """"""""" \"' | perl -pe 's/(?<!\\)"/\\\"/g'
 bad \"  string\" \"\"\"\"\"\"\"\"\" \"

使用負向後看,您可以實現這一點。https://www.regular-expressions.info/lookaround.html

相關內容