json - 使用命令行工具删除结尾的 json 逗号
问题描述
我想从 json 中删除尾随逗号,
{
"key1": "value1",
"object": {
"key2": "value2", // <- remove comma
},
"key3": "value3", // <- remove comma
}
我想出了,
tr -d '\n' | \
sed -E 's:,(\s*}):\1:g' | \
jq .
它有效,但我想完全融入sed
.
我想出了,
sed -E '/,\s*$/ { N; s:,\s*(\n\s*},?):\1: }'
适用于上述输入但失败
{
"key1": "value1",
"object": {
"key2": "value2",
},
"key3": "value3",
"key4": "value4", // <- remove comma
}
asN
读取下一行并从下一行重新开始。
// output sed -E '/,\s*$/ { N;l }' using l/look command
{
"key1": "value1",\n "object": {$
"key1": "value1",
"object": {
"key2": "value2",\n },$
"key2": "value2",
},
"key3": "value3",\n "key4": "value4",$
"key3": "value3",
"key4": "value4",
}
更新:
添加另一个示例进行测试:
{
"key1": "value1",
"object1": {
"object2": {
"key2": "value2"
},
},
"key3": "value3",
}
更新:
这适用于我所投掷的任何东西。
sed -E -n 'H; x; s:,(\s*\n\s*}):\1:; P; ${x; p}' | \
sed '1 d'
解释:
sed -E -n 'H; x; P; ${x; p}'
-n 'H; x'
将每一行附加到模式空间中的下一行(除了最后一行,它只是简单地用 打印${x; p}
)
和
s:,(\s*\n\s*}):\1:;
删除模式空间中的尾随逗号。
解决方案
由于输入似乎是 JSON 的某种扩展,因此您可以使用用于此类扩展的命令行工具。例如:
$ hjson -j < input.txt
或者:
$ any-json --input-format=hjson input.txt
两种情况下的输出
{
"key1": "value1",
"object": {
"key2": "value2"
},
"key3": "value3"
}
推荐阅读
- reporting-services - SSRS 报告附件无法打开
- python - Python/Kivy 未在 Windows 7 上运行
- angular - 剑道网格隐藏行(Angular 2)
- bash - 使用 grep 搜索不同行的多个关键字
- python - 枚举属性的类型注释
- c# - 更改已从资产包实例化的运行时创建的材料的属性
- sql-server - SSIS:使用脚本任务导入 csv 文件(文件分隔符为 ,文本限定符为“)到 sql server 表
- c# - 有没有办法可以确定我在 foreach 循环中的哪一行?
- spring - 从春季批处理中的步骤启动作业
- python - gz文件解压过程的不同行为