【问题标题】:Convert simple array to numeric key and value将简单数组转换为数字键和值
【发布时间】:2019-07-10 00:50:23
【问题描述】:

我真的在为这个简单的任务而苦苦挣扎。我正在尝试转换:

[
    "arn:aws:iam::123456789012:role/masters.a.eu.somewhere.com",
    "arn:aws:iam::123456789012:role/masters.b.eu.somewhere.com",
    "arn:aws:iam::123456789012:role/masters.c.eu.somewhere.com"
]

这样的:

{
    "0": "arn:aws:iam::123456789012:role/masters.a.eu.somewhere.com",
    "1": "arn:aws:iam::123456789012:role/masters.b.eu.somewhere.com",
    "2": "arn:aws:iam::123456789012:role/masters.c.eu.somewhere.com"
}

仅使用 JQ。我试过使用“to_entries”,但没有得到想要的输出。任何建议表示赞赏。

【问题讨论】:

  • abc 来自哪里?仅a 用于第一个元素,b 用于第二个等,还是以某种方式从 URL 中提取?
  • 第一个是 a,第二个是 b,第三个是 c。我已经用编号元素修改了我的示例,因为它与 to_entries 尽可能接近。只是不是所需的格式。

标签: arrays json indexing jq


【解决方案1】:

诚然,这并不明显,但一个非常简短的解决方案是:

with_entries(.key |= tostring)

一个更加平庸但仍然非常受人尊敬的解决方案是:

. as $in
| reduce range(0;length) as $i ({}; . + {($i|tostring): $in[$i]})

【讨论】:

  • 一个可能稍微更易审查的版本(不依赖于“数组有数字键,对象有字符串键”的魔法)是to_entries | map({ (.key | tostring): .value }) | add
  • 非常感谢。正如你所说,不明显但合乎逻辑,现在我明白了。赞成 hobbs 的额外建议,因为我可以看到在额外转换方面对我更有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-25
相关资源
最近更新 更多