我有一个放在 Linux 服务器中的 JSON 文件。我想从第二个位置开始删除 partcualr 对象。 问题:-
- 根元素保留它,必须删除在 JSON 文件中重复的相同对象。
- 如何在 JSON 数据中附加方括号
我厌倦了 sed
和 awk
命令,但运气不好
sed '/"审计"/,//d;/^$/d' sample_request.json >> test.json
-- 它正在删除整个对象而不是特定单词。
audit -- 从病房的第二个位置删除 json 文件中的这个对象。 [] -- 此框括号需要附加到显示为的文件 异常输出
实际:-
{
"audit" : {
"audit number" : "123",
"amount" : {
"Amount" : -10.0,
"code" : "abc"
},
"over" : 1
},
"audit" : {
"audit number" : "234",
"amount" : {
"Amount" : 290.0,
"code" : "xyz"
},
"over" : 5
},
"audit" : {
"audit number" : "235",
"amount" : {
"Amount" : 270.0,
"code" : "kdb"
},
"over" : 6
},
"id" : "test",
"eid" : "1",
"bcode" : "123",
"wid" : "1234",
"wsid" : "11",
"ss" : 2
}
异常输出如下:
{
"audit" :[{
"audit number" : "123",
"amount" : {
"Amount" : -10.0,
"code" : "abc"
},
"over" : 1
},
{
"audit number" : "234",
"amount" : {
"Amount" : 290.0,
"code" : "xyz"
},
"over" : 5
},
{
"audit number" : "235",
"amount" : {
"Amount" : 270.0,
"code" : "kdb"
},
"over" : 6
},
]
"id" : "test",
"eid" : "1",
"bcode" : "123",
"wid" : "1234",
"wsid" : "11",
"ss" : 2
}
最佳答案
在 sed 中,你可以这样做:
sed -e '1,/audit number/s#audit".*#audit" : [{#' \
-e '/audit number/,$s#"audit"\s*:##' \
-e '{N;s#,\s*"id"#]&#;P;D}' input.txt
大致翻译为:
- 在第 1 行和第一个“审计编号”之间用 A 代替审计字段。
- 在第一个“审计编号”和末尾之间,用 B 代替审计字段。
- 使用连线查找 ,[空格]"id"并在其前插入 ']'。
使用字符串工具处理 JSON 是非常危险的,因为交换 JSON 的程序之间不相关的间距和顺序的变化会扰乱这种解析方式。通常最好进行最少量的修复以获得有效的 JSON,然后以最喜欢的编程语言使用普通的 JSON 工具。
关于json - 如何通过 Linux 命令删除 JSON 文件中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55320938/