Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果json没有';不存在?_Json_Windows_Key_Jq - Fatal编程技术网

如果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" : {

我有一个包含以下数据的json文件:

{
  "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答案仍然是受欢迎和赞赏的)。