如何在大JSON中删除多个对象并保留较少的对象 [英] How to delete many and keep few objects in big 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屋!
查看全文