sed 从 json 字符串中删除 json 子对象
Posted
技术标签:
【中文标题】sed 从 json 字符串中删除 json 子对象【英文标题】:sed remove json suboject from a json string 【发布时间】:2021-10-14 18:16:59 【问题描述】:我尝试预处理一个 JSON 文件并希望删除其中的所有子对象。
请注意,我的 JSON 字符串是内联的(没有 \r)。
输入我有:
"total": 2,
"result": [
"id":1,
"createdOn" : 123456,
"obj1":
...:...,
...:...
,
"obj2":
...:...,
...:...
,
"otherattribute": "..."
,
"id":2,
"createdOn" : 123456,
"obj1":
...:...,
...:...
,
"obj2":
...:...,
...:...
,
"otherattribute": "..."
]
又想拥有:
"total": 2,
"result": [
"id":1,
"createdOn" : 123456,
"otherattribute": "..."
,
"id":2,
"createdOn" : 123456,
"otherattribute": "..."
]
我尝试过使用 sed 命令:
sed 's/"obj1":[^]*//g'
它将删除“ojb1”子对象,但保留该子对象的结尾“”。 我没有找到删除“”的方法。
怎么做?
第二个问题:我知道主题列表;但是有没有办法在不知道名字的情况下直接删除所有这些主题?比如:
sed 's/".*":[^]*//g'
这样我就只有一个 sed 命令,而不必像这样链接命令:
sed 's/obj1//g' | sed 's/obj2//g' | sed 's/obj3//g' ...
【问题讨论】:
我什至不会考虑使用 sed 编辑 JSON。无论你用 sed 写什么,我都会在两分钟内创建一个单元测试来打破它。 Super... 我必须解析的 json 字符串将始终被格式化为相同的.. 格式。它不是一个完全通用的 JSON 字符串。所以我想我可以使用 sed 来预处理我的 json 字符串。 【参考方案1】:我给出第一个答案:
sed 's/"obj1":[^,]*//g'
它将匹配"obj1":
直到字符,然后再次匹配
,
,这样最后两个字符也将被删除(替换为空)。
现在我尝试做一些更通用的事情来匹配任何对象名称,如下所示:
sed 's/"[[:alnum:]]":[^,]*//g'
但它不起作用...... 我已经尝试过转义或转义转义或转义转义双引号但没有成功...
【讨论】:
以上是关于sed 从 json 字符串中删除 json 子对象的主要内容,如果未能解决你的问题,请参考以下文章
如何从多个重复的 json 文件中删除一个文本块,其中文件之间有微小的变化?