我想从下面的Json中删除多余的报价
{""id"":""1"", ""name"":""john"",""address"":"",""timestamp"":""2018/01/01 12:43:42 -700"",""dept"":""}
我正在为此使用sed
命令:
sed -i -e 's/""/"/g' file.json
但是它不能按预期方式工作,因为address
和dept
的值只是空字符串""
,我不想只用一个{{1 }},这将是一个新的JSON语法错误。我只想替换包含实际值的字段周围的双精度双引号。所以我尝试了
"
但它也不起作用。
我该如何实现?
答案 0 :(得分:2)
假设键和值不包含转义逗号或双引号:
sed -i 's/""\([^",]\+\)""/"\1"/g' file
[^",]
匹配除"
和,
之外的任何字符,\+
表示一个或多个。将其括在转义括号(\(\)
)中会填充捕获组1(替换字符串中的\1
会扩展到它)。因此,""\([^",]\+\)""
匹配两个双引号,然后是一个或多个不是逗号或双引号的字符,然后是两个双引号。