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 子对象的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sed/aws 从 json 文件中获取值?

如何从多个重复的 json 文件中删除一个文本块,其中文件之间有微小的变化?

如何使用 sed 作为守护程序或服务来解析传入的 JSON 字符串?

如何从 JSON 字符串中删除括号和引号

从 JSON 中删除特殊字符

无法从添加/删除文本字段中的文本字段值形成 JSON 字符串对象