【问题标题】:How to delete many and keep few objects in big JSON如何在大 JSON 中删除许多对象并保留少量对象
【发布时间】:2021-07-16 16:05:17
【问题描述】:

如何在大 JSON 文件中删除多个对象并保留几个对象?在这里,我有以下 JSON 文件:

{
  "service" : {
    "category" : "managed-object",
    "resource" : "object",
    "action" : "locate",
    "options" : {
      "max" : "#VALUE",
      "objectGroupMember" : "#FRESH|DEFAULT",
      "attributes" : {
        "name" : {
          "value" : "#VALUE"
        },
        "state" : "#PREACTIVE|ACTIVE|DEACTIVATED|COMPROMISED|DESTROYED|DESTROYED_COMPROMISED",
        "objectType" : "#VALUE",
        "fresh" : "#YES|NO",
        "objectGroup" : "#VALUE",
        "contactInfo" : "#VALUE",
        "cryptographicAlgorithm" : "#VALUE",
        "cryptographicLength" : "#VALUE",
        "cryptoUsageMask" : "#VALUE",
        "certificateLength" : "#VALUE",
        "certificateType" : "#VALUE",
        "x509CertificateSubject" : "#VALUE",
        "x509CertificateIssuer" : "#VALUE",
        "digitalSigningAlgorithm" : "#VALUE",
        "digest" : {
          "digestValue" : "#VALUE",
          "algorithm" : "#VALUE",
          "keyFormatType" : "#VALUE"
        },
        "link" : {
          "linkType" : "#VALUE",
          "linkValue" : "#VALUE"
        },
        "activationDate" : "#YYYY-MM-DD HH:mm:ss",
        "deactivationDate" : "#YYYY-MM-DD HH:mm:ss",
        "processStartDate" : "#YYYY-MM-DD HH:mm:ss",
        "protectStopDate" : "#YYYY-MM-DD HH:mm:ss",
        "initialDate" : "#YYYY-MM-DD HH:mm:ss",
        "lastChangeDate" : "#YYYY-MM-DD HH:mm:ss",
        "compromiseDate" : "#YYYY-MM-DD HH:mm:ss",
        "compromiseOccurrenceDate" : "#YYYY-MM-DD HH:mm:ss",
        "destroyDate" : "#YYYY-MM-DD HH:mm:ss",
        "archiveDate" : "#YYYY-MM-DD HH:mm:ss"
      },
      "customAttributes" : [ {
        "name" : "#VALUE",
        "value" : "#VALUE",
        "type" : "#TEXT|NUMBER"
      } ]
    }
  }
}

什么 jq 命令删除所有内容,但:

{
  "service" : {
    "category" : "managed-object",
    "resource" : "object",
    "action" : "locate",
    "options" : {
      "attributes" : {
        "name" : {
          "value" : "#VALUE"
        },
      },
      "customAttributes" : [ {
        "name" : "#VALUE",
        "value" : "#VALUE",
        "type" : "#TEXT|NUMBER"
      } ]
    }
  }
}

我搜索了高低,并花了很多时间反复试验,但没有任何效果。我非常感谢您的提前支持,谢谢。 如何在大 JSON 文件中删除多个对象并保留几个对象?

【问题讨论】:

    标签: json jq


    【解决方案1】:

    好的,让我们先总结一下你要做什么:

    • 删除一些字段并将其他字段保留在service.options
    • service.options.attributes 中删除除name 之外的所有字段

    您也没有专门修改任何其他内容。例如你想:

    • 保留service中的所有字段
    • 保留service.options.customAttributes的所有内容

    根据您是要指定要删除的字段还是要保留的字段,您可以像这样修改service.options

    # Specify what to keep...
    jq '.service.options|={attributes,customattributes}'
    
    # ...or what to drop
    jq 'del(.service.options.max, .service.options.objectGroupMember)'
    

    要从service.options.attributes 中删除除name 之外的所有字段,最简单的方法是指定您要保留的内容:

    # Specify what to keep
    jq '.service.options.attributes|={name}'
    

    您可以将这些组合在一起:

    jq 'del(.service.options.max, .service.options.objectGroupMember)|.service.options.attributes|={name}'
    

    你可以将重复简化一点:

    jq '.service.options|=(del(.max,.objectGroupMember)|.attributes|={name})'
    

    总而言之,我们使用了:

    • |= 将修改应用于对象的一部分。请记住,我们可以深入挖掘该运算符左侧的复杂对象,但我们的输出仍然保持对象的所有更高层不变。
    • {name} 的快捷语法仅保留名称字段。这相当于{"name":.name}
    • del(.field1, .field2) 从对象中删除字段。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 2022-07-02
    • 2019-10-09
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 2012-02-26
    相关资源
    最近更新 更多