小编Pau*_*son的帖子

如何使用jq从多个嵌套数组中提取键

建立

我试图弄清楚jq过滤器是如何工作的,并且难以找出嵌套数组.使用下面的数据我无法做出平坦的5键输出.我可以得到1个键和4个空值或4个键和1个空值,但不是所有5个键.

1个键,4个空值:

.Reservations[] | {OwnerId, InstanceId, ImageId, PrivateIpAddress, Platform}
Run Code Online (Sandbox Code Playgroud)

返回:

{
 "OwnerId": "000000000000",
 "InstanceId": null,
 "ImageId": null,
 "PrivateIpAddress": null,
 "Platform": null
}
Run Code Online (Sandbox Code Playgroud)

4个键,1个空:

.Reservations[].Instances[] | {OwnerId, InstanceId, ImageId, PrivateIpAddress, Platform}

{
  "OwnerId": null,
  "InstanceId": "i-v33333333",
  "ImageId": "ami-44444444",
  "PrivateIpAddress": "10.0.0.0",
  "Platform": "windows"
}
Run Code Online (Sandbox Code Playgroud)

由于各种原因,我不能在AWS CLI中使用"--query"选项,它确实返回我正在寻找的格式:

aws ec2 describe-instances --region us-east-1 --profile temp --query 'Reservations[*].{InstanceId:Instances[0].InstanceId,IP:Instances[0].PrivateIpAddress,Platform:Instances[0].Platform,OwnerId:OwnerId}'
Run Code Online (Sandbox Code Playgroud)

输出:

[
    {
        "InstanceId": "i-11111111",
        "IP": "10.9.9.3",
        "OwnerId": "111111111111",
        "Platform": windows
    },
    {
        "InstanceId": "i-22222222",
        "IP": "10.0.0.0",
        "OwnerId": "111111111111",
        "Platform": windows
    }
]
Run Code Online (Sandbox Code Playgroud)

这是JSON输入:

   {
    "Reservations": …
Run Code Online (Sandbox Code Playgroud)

json amazon-web-services jq

7
推荐指数
1
解决办法
8848
查看次数

如何用jq删除数组元素?

我试图找出如何使用jq从某些JSON中删除数组元素.以下是输入和所需输出.

jq .Array[0] 
Run Code Online (Sandbox Code Playgroud)

输出我想要的数组元素.

{
      "blah1": [
        "key1:val1"
      ],
      "foobar0": "barfoo0",
      "foobar1": "barfoo1"
    }
Run Code Online (Sandbox Code Playgroud)

但是我如何重新包装:

{
  "blah0": "zeroblah",
  "Array": [
Run Code Online (Sandbox Code Playgroud)

  ]
}
Run Code Online (Sandbox Code Playgroud)

输入:

{
  "blah0": "zeroblah",
  "Array": [
    {
      "blah1": [
        "key1:val1"
      ],
      "foobar0": "barfoo0",
      "foobar1": "barfoo1"
    },
    {
      "blah2": [
        "key2:val2"
      ],
      "foobar2": "barfoo2",
      "foobar3": "barfoo3"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

期望的输出:

{
  "blah0": "zeroblah",
  "Array": [
    {
      "blah1": [
        "key1:val1"
      ],
      "foobar0": "barfoo0",
      "foobar1": "barfoo1"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

json jq

7
推荐指数
2
解决办法
1万
查看次数

编写自定义 OmniAuth 策略

我有一个带有 Devise 的 Rail 4 应用程序。我正在尝试配置 OmniAuth 以使用我们公司的 Ping OpenID Connect IdP。看来我必须在机架中间件中编写一个 OmniAuth 策略。

我拿了'omniauth-digitalocean' gem(有他们的策略)并小心地用另一个名字替换了'digitalocean'的所有引用。我小心地尊重所有情况以符合惯例。

我现在遇到的问题是我似乎有一个私人宝石。我将它添加到我的 Gemfile 中:

gem 'omniauth-private', :path => "/var/lib/gems/2.0.0/gems/omniauth-private-0.1.0"
Run Code Online (Sandbox Code Playgroud)

运行“捆绑安装”时没有出现错误。

我在使用 'rake db:migrate' 时收到此错误:

fatal: Not a git repository (or any of the parent directories): .git
Run Code Online (Sandbox Code Playgroud)

我相信这是由我的自定义 gem 中的 .gitignore 文件引起的。我删除了 .gitignore 文件,现在我得到了:

Devise::OmniAuth::StrategyNotFound: Could not find a strategy with name `Private'. Please ensure it is required or explicitly set it using the :strategy_class option.
Run Code Online (Sandbox Code Playgroud)

这与我在确定需要编写 n Omniuth 策略之前收到的错误消息相同,所以我认为这意味着我的 gem 没有被识别。

所以我不确定到底发生了什么。我想我正在为这个私人宝石而苦苦挣扎。但这也可能是 OmniAuth 问题。

任何人都曾获得过使用 …

openid ruby-on-rails devise omniauth

5
推荐指数
1
解决办法
1867
查看次数