如果json没有';不存在?
我有一个包含以下数据的json文件:如果json没有';不存在?,json,windows,key,jq,Json,Windows,Key,Jq,我有一个包含以下数据的json文件: { "Index" : { "example_user" : { "important_key" : "leave_me_alone", "blah" : { "more_stuff" : { "ignore_this" : "and_this_too" } } }, "another_user" : { "blah" : {
{
"Index" : {
"example_user" : {
"important_key" : "leave_me_alone",
"blah" : {
"more_stuff" : {
"ignore_this" : "and_this_too"
}
}
},
"another_user" : {
"blah" : {
"more_stuff" : {
"ignore_this" : "and_this_too"
}
}
},
"extra_person" : {
"blah" : {
"more_stuff" : {
"ignore_this" : "and_this_too"
}
}
}
}
}
如您所见,另一个用户
和额外人员
缺少重要
键
我的目标是有条件地添加“important\u key”:“
,其中缺少但不替换任何现有的important\u key
值。我使用的程序是来自的JQ
(1.6)
在jqplay.org
上多次尝试失败,并在互联网上集中(重新)搜索如何完成工作后,我只实现了以下几点:
过滤器:.Index[]+={“重要_键”:“数据”}
结果
{
"Index": {
"example_user": {
"important_key": "data",
"blah": {
"more_stuff": {
"ignore_this": "and_this_too"
}
}
},
"another_user": {
"blah": {
"more_stuff": {
"ignore_this": "and_this_too"
}
},
"important_key": "data"
},
"extra_person": {
"blah": {
"more_stuff": {
"ignore_this": "and_this_too"
}
},
"important_key": "data"
}
}
}
我知道+=
(over)会写入任何现有的键值(注意example\u user
)。我一直在试验多个管道过滤器/操作符,包括|=
和{
}
,但最终,上述结果是我能得到的最接近的结果
(不幸的是,我似乎找不到jqplay代码片段,我对所有事情都“疯狂”了)当你必须有条件地做一些事情时,你必须做一些过滤,或者使用if
或者select
或者其他方法
对于要检查的每个对象,请检查该对象是否有您的重要\u键
,并在必要时添加它。如果它有钥匙,什么也不做,否则设置它
.Index[] |= if has("important_key") then . else .important_key = $myImportantKey end
下面使用的命令行适用于此示例<代码>jrepl.bat“{(\s*)(\x22blah\x22)””{$1\x22重要密钥\x22:\x22\x22,$1$2”/M/X/F“Example.json”/O-
尽管不使用jq,但如果您对该解决方案满意,请告诉我,我可以写一个答案并解释非常简单的JScript正则表达式。正则表达式问题的主题是堆栈溢出。我知道dbenham的优秀JREPL脚本(我似乎无法在这里格式化文本),但由于json中有数组的工作示例,所以我是(和am)希望这可以单独使用JQ来完成。不过,我很感谢你的意见,这就是为什么我会对你的评论投赞成票。与此同时,我将继续希望使用JQ类型的方法。感谢你的贡献,杰夫·梅尔卡多。我在cmd/batch和C项目中经常使用这些语句,但JQ()对我来说是一个完全不同的故事。由于$myImportantKey是一个自定义变量/值,我如何转换它使其在jqplay.org上可用(因此也适用于JQ)?$myImportantKey
只是一些(JQ)具有您希望设置的值的变量。它不一定是一个变量,您可以在其位置插入任何您希望的内容。以下是jqplay片段中的所有内容:Jeff,您做到了?我想我必须理解您的魔力…请给我一些时间重新(调整/调整)我的内部工作,我会尽快回复你。如果我有能力,我会给你一个金徽章,但那会被认为是作弊,所以我会选择你的答案作为解决方案!这真的让我的一周:-)(额外的JQ答案仍然是受欢迎和赞赏的)。