Linux Bash中如何将字符串JSON转为JSON对象?能否用sed实现?
使用sed转换带转义的JSON字符串为标准JSON格式
我有一个file.json文件,其中包含一段带转义的JSON字符串内容:
"{ \"devices\" : [ { \"type\" : \"eks\", \"kubeconfig_path\" : \"/home/centos/workspace/rt-argus-eks-parallel-dynamic-infra/ansible/utils/dynamic-infra-v2/./kubeconfig-jenkins-rt-argus-eks-parallel-dynamic-infra-70_0\" }, { \"type\" : \"eks\", \"kubeconfig_path\" : \"/home/centos/workspace/rt-argus-eks-parallel-dynamic-infra/ansible/utils/dynamic-infra-v2/./kubeconfig-jenkins-rt-argus-eks-parallel-dynamic-infra-70_1\" } ] }"
希望将其转换为标准的JSON格式:
{ "devices" : [ { "type" : "eks", "kubeconfig_path" : "/home/centos/workspace/rt-argus-eks-parallel-dynamic-infra/ansible/utils/dynamic-infra-v2/./kubeconfig-jenkins-rt-argus-eks-parallel-dynamic-infra-70_0" }, { "type" : "eks", "kubeconfig_path" : "/home/centos/workspace/rt-argus-eks-parallel-dynamic-infra/ansible/utils/dynamic-infra-v2/./kubeconfig-jenkins-rt-argus-eks-parallel-dynamic-infra-70_1" } ] }
之前尝试过jq -rc命令处理,现在想知道能不能用sed实现这个转换。
可以用sed完成这个转换,只需处理两个核心点:移除首尾的包裹双引号,以及清除双引号前的转义反斜杠。执行以下命令即可:
sed -e 's/^"//' -e 's/"$//' -e 's/\\"/"/g' file.json
命令拆解:
s/^"//:去掉文本开头的双引号s/"$//:去掉文本结尾的双引号s/\\"/"/g:全局替换所有\"为",消除双引号的转义标记
如果需要直接修改原文件(谨慎操作),可以添加-i参数(BSD系统需写成-i ''):
sed -i -e 's/^"//' -e 's/"$//' -e 's/\\"/"/g' file.json
内容的提问来源于stack exchange,提问作者Sushant Thakur
相关产品推荐
相关产品推荐

