我想从 json 中删除尾随逗号,
{
"key1": "value1",
"object": {
"key2": "value2", // <- remove comma
},
"key3": "value3", // <- remove comma
}
Run Code Online (Sandbox Code Playgroud)
我想出了,
tr -d '\n' | \
sed -E 's:,(\s*}):\1:g' | \
jq .
Run Code Online (Sandbox Code Playgroud)
它有效,但我想把它完全纳入sed
.
我想出了,
sed -E '/,\s*$/ { N; s:,\s*(\n\s*},?):\1: }'
Run Code Online (Sandbox Code Playgroud)
这适用于上述输入,但失败
{
"key1": "value1",
"object": {
"key2": "value2",
},
"key3": "value3",
"key4": "value4", // <- remove comma
}
Run Code Online (Sandbox Code Playgroud)
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",
}
Run Code Online (Sandbox Code Playgroud)
更新:
添加另一个测试示例:
{
"key1": "value1",
"object1": {
"object2": {
"key2": "value2"
},
},
"key3": "value3",
}
Run Code Online (Sandbox Code Playgroud)
更新:
无论我投入什么,这都有效。
sed -E -n 'H; x; s:,(\s*\n\s*}):\1:; P; ${x; p}' | \
sed '1 d'
Run Code Online (Sandbox Code Playgroud)
解释:
sed -E -n 'H; x; P; ${x; p}'
Run Code Online (Sandbox Code Playgroud)
-n 'H; x'
将每一行附加到模式空间中的下一行(除了最后一行,它只是用 打印${x; p}
)
和
s:,(\s*\n\s*}):\1:;
Run Code Online (Sandbox Code Playgroud)
删除模式空间中的尾随逗号。
由于输入似乎是 JSON 的某种扩展,因此您可以使用用于此类扩展的命令行工具。例如:
$ hjson -j < input.txt
Run Code Online (Sandbox Code Playgroud)
或者:
$ any-json --input-format=hjson input.txt
Run Code Online (Sandbox Code Playgroud)
{
"key1": "value1",
"object": {
"key2": "value2"
},
"key3": "value3"
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6594 次 |
最近记录: |