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實現引號反轉義