在命令行中如何解碼二次JSON編碼的字符串?

2020-12-16 我聊Python

JSON 二次encode解碼,通常我們的大的數據結構JSON中還會包含JSON 字符串,來保存一些額外的信息,這樣一來這個結構就是二次JSON編碼了。如何在命令行中將這個結構展開呢?

構造測試數據,如下是通過PHP命令行生成測試一個二次JSON encode的字符串

php -r "echo json_encode(json_encode(['a' => ['b' => 1]]));"# "{\"a\":{\"b\":1}}"

如何解決這個問題,一開始想到的就是用sed替換,將字符串中的 \\" 替換為 \",\" 替換為 ",字符串開頭的 " 和末尾的 " 替換為空。

php -r "echo json_encode(json_encode(['a' => ['b' => 1]]));" |\sed 's/\\\\"/\\"/g; s/\\\"/"/g; s/^"//; s/"$//' | \jq .{"a": {"b": 1}}

問題還沒有解決,因為每次我們都需要編譯一長串的sed正則,十分的麻煩,想到把這個命令加到 ~/.bash_profile 中,貌似不行," 還需要再次轉義,這樣一來就顯得十分的麻煩,還不如自己寫一個管道程序,從數據管道中讀取數據,然後用程序替換。下面是用Go編寫的程序,從管道標準輸入 os.Stdin 中讀取數據,每次一行,做四次字符串替換,且輸出。

Golang實現引號反轉義

相關焦點

  • 深入剖析go中字符串的編碼問題——特殊字符的string怎麼轉byte?
    UTF-8是針對Unicode的一種可變長度字符編碼。它可以用來表示Unicode標準中的任何字符。UTF-8的特點是對不同範圍的字符使用不同長度的編碼。對於0x00-0x7F之間的字符,UTF-8編碼與ASCII編碼完全相同。
  • php中的Json是什麼?什麼時候使用Json
    Json是一種在網際網路編程中常用的數據結構,是一種輕量級的數據交換格式,主要用於替代網際網路中使用的xml數據。和xml相比,它更小巧但描述能力卻不差,由於它的小巧所以網絡傳輸數據將減少更多流量,從而加快數據傳輸速度。
  • 師弟不講武德,這編碼算法也講得忒溜了……
    </li> </ul> 如果伺服器收到URL編碼的字符串,就可以對其進行解碼,還原成原始字符串。2.Java中使用Base64編碼算法在Java中,二進位數據就是byte[]數組。
  • Json串的欄位如果和類中欄位不一致,如何映射、轉換?
    可是有的情況就無法這樣簡單處理,比如json串的欄位和類中的欄位不一致時。不一致有以下這些情況。json串的欄位名與類中的欄位名不一致比如我們上面的例子中類中的欄位名叫「id」,而要求json中的欄位名叫「tid」。那要怎麼辦呢?fastjson已經替我們想到了。看我下面的示例。
  • 中文編碼雜談
    即文件保存的時候是按照ANSI編碼(其實就是GB2312,後面會詳細介紹)保存,打開的時候程序按照UTF-8方式對內容解釋,於是就出現了亂碼。避免亂碼的方式很簡單,在「文件」菜單中選擇「打開」命令,選擇保存的文件,然後選擇「ANSI」編碼,此時就能看到久違的「聯通」兩個字了。在Linux平臺上如果使用cat等命令查看文件中的中文內容時,可能出現亂碼。
  • JAVA 中如何反轉字符串字符,一共4中方式,請牢記!
    比如:String str = "abcd";通過反轉倒序後輸出:dcba故此文本主要講述如何將 String 類型的字符串字母倒序過來的幾種方法。下面就列舉如下4種方法並一一說明!StringBuilder(str).reverse()在Java中,我們可以使用StringBuilder(str).reverse()使字符串字母倒序。
  • python字符串前加r、f、u、l 的區別
    在字符串前加r可防止字符串轉義 作用:沒有轉義特殊或不能列印的字符。 u/U:表示unicode字符串不是僅僅是針對中文, 可以針對任何的字符串,代表是對字符串進行unicode編碼。
  • 從符號學角度看廣告的編碼與解碼
    費斯克將傳播學研究分為「過程」學派和「符號」學派兩種,他認為「過程學派」將傳播看作是信息的傳遞與溝通,關注信息的編碼、解碼、渠道使用以及傳播的效果問題。而「符號」學派將傳播視為意義的生產與交換,關注信息文本如何與受眾互動並產生意義的問題。而本文擬從傳播學的過程學派和符號學派出發,將廣告符號的意義生產與交換置於廣告符號編碼、接收、解碼的環節當中,具體分析廣告符號的創作與意義建構。
  • Java基礎之字符串及——String
    (「laofu」);以上兩種創建方式的對象在JVM中又是如何分布的呢?下面就來一一解密:方式一和方式二在JVM中又是如何分布?運行常量池:其中存儲的是代碼中的常量數據。方式一和方式二有何不同?方式二:String s2 = new String(「laofu」); 最多會創建兩個String對象,最少創建一個String對象。可使用new關鍵字創建對象是會在堆空間創建內存區域,這是第一個對象;然後對象中的字符串字面量可能會創建第二個對象,而第二個對象如方式一中所描述的那樣,是有可能會不被創建的,所以至少創建一個String個對象。
  • 如何在 Linux 終端上漂亮地列印 JSON 文件
    如何在Linux終端上漂亮地列印JSON文件 JSON 文件非常棒,因為它們以人類可讀的格式存儲數據集合。然而,如果 JSON 文件被最小化過,那麼閱讀 JSON 文件可能會很痛苦。
  • 20.表示數值的字符串(劍指 Offer 題解,面試遇到好多次)
    例如,字符串"+100",「5e2」,"-123",「3.1416"和」-1E-16"都表示數值。但是"12e",「1a3.14」,「1.2.3」,"±5"和"12e+4.3"都不是。false「12e」「1a3.14」「1.2.3」「±5」「12e+4.3」思路思路一:利用正則表達式,對字符串中的每個字符進行判斷分析
  • 命令行工具開發:如何快速實現命令行提示?
    而像如下包括描述的命令行提示就直觀很多:二 生成命令行提示這裡不再介紹bash,zsh,fish等各種shell的命令行提示的機制,沒有人會手動編寫這些命令行提示腳本,大家都會使用框架生成對應shell的命令行提示腳本。
  • Excel技巧—超實用的字符串拆分小技巧
    我們每天都在Excel中各種操作,本質上來說就是對各種數據進行操作,而這些數據專業點來說就是字符串。因此熟悉各種對字符串的操作對於Excel日常工作中是非常有好處的。而今天小編在這裡給大家分享幾個超實用的字符串拆分小技巧。
  • 漫畫:什麼是字符串匹配算法?
    讓我們來舉一個例子:在上圖中,字符串B是A的子串,B第一次在A中出現的位置下標是2(字符串的首位下標是0),所以返回 2。我們再看另一個例子:在上圖中,字符串B在A中並不存在,所以返回 -1。為了統一概念,在後文中,我們把字符串A稱為主串,把字符串B稱為模式串。
  • 漫畫:如何給女朋友解釋什麼是「錕斤拷」?
    就像電報只能發出"滴"和"答"聲一樣,計算機只認識0和1兩種字符,但是,人類的文字是多種多樣的,如何把人類的文字轉換成計算機認識的01字符呢,這個過程同樣需要通過字符編碼。字符編碼(Character encoding)是一套法則,使用該法則能夠對自然語言的字符的一個集合(如字母表或音節表),與其他東西的一個集合(如號碼或電脈衝)進行配對。
  • 為什麼Linux用戶喜歡命令行?
    為什麼這些傢伙向我們展示了如何使用命令行使應用程式可執行?為什麼不只在文件管理器中找到它,右鍵單擊它,選擇"屬性",轉到權限選項卡,然後選中相應的框使其可執行?在我看來,這似乎更直觀。或者也許是經過二十年的Windows後感覺"正確"的東西。用命令行製作可啟動的USB記憶棒?啟動終端窗口以安裝驅動程序或使用ffmpeg編碼視頻?你瘋了?
  • 10個很棒的 JavaScript 字符串技巧
    我們稱一個字符序列為字符串。這幾乎是所有程式語言中都有的基本類型之一。這裡跟大家展示關於 JS 字符串的10個很棒的技巧,你可能還不知道哦?1.如何多次複製一個字符串JS 字符串允許簡單的重複,與純手工複製字符串不同,我們可以使用字符串的repeat方法。2. 如何填充一個字符串到指定的長度有時,我們希望字符串具有特定長度。
  • 碼學院 | 尋蹤:JAVA編碼格式
    stringSize(-i) + 1 : stringSize(i); char[] buf = new char[size]; getChars(i, size, buf); return new String(buf, true);}左右滑動查看完整代碼代碼中把i拆成一個一個字符,共5個字符,組成字符數組char[],形成一個新的字符串輸出,當然了
  • 最新整理的常用 vim 命令,速收藏!
    9ssxphu7898%mn ,假如光標位於字符 h 位置,按dw,此時剪切的字符串是 hu7898%mnx #每次刪除光標處的字符,刪除之後,光標後面的字符串向光標方向移動一個位置X #每次刪除光標前面一個字符,刪除之後,光標以及後面的字符串會向行首方向移動一個位置r #替換光標位置的一個字符