如何在大JSON中删除多个对象并保留较少的对象 [英] How to delete many and keep few objects in big JSON

查看:14
本文介绍了如何在大JSON中删除多个对象并保留较少的对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在大的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大文件中删除多个对象,保留几个对象?

推荐答案

好的,让我们从总结您要做的事情开始:

  • 删除某些字段并保留其他字段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)从对象中删除字段。

这篇关于如何在大JSON中删除多个对象并保留较少的对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆