【问题标题】:sed remove json suboject from a json stringsed 从 json 字符串中删除 json 子对象
【发布时间】: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 字符串。

标签: json sed


【解决方案1】:

我给出第一个答案:

sed 's/"obj1":{[^}},]*//g'

它将匹配"obj1": 直到字符},然后再次匹配},,这样最后两个字符也将被删除(替换为空)。

现在我尝试做一些更通用的事情来匹配任何对象名称,如下所示:

sed 's/"[[:alnum:]]":{[^}},]*//g'

但它不起作用...... 我已经尝试过转义或转义转义或转义转义双引号但没有成功...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 2021-10-15
    • 2011-12-25
    • 2012-04-09
    • 2021-10-29
    • 2017-05-08
    • 1970-01-01
    相关资源
    最近更新 更多