【问题标题】:JQ how to combine heterogeneous objects into one array?JQ如何将异构对象组合成一个数组?
【发布时间】:2021-09-01 17:47:23
【问题描述】:

如何使用 JQ 解析以下 JSON 对象并生成以下输出?

JSON 输入:

{
    "key1": {
        "a": "A"
    },
    "key2": {
        "b": "123"
    },
    "key3": {
        "c": ["C1", "C2"]
    }
}

期望的输出:

[
  "a": "A",
  "b": 123,
  "c": "C1",
  "c": "C2"
]

【问题讨论】:

  • 您的输入和 o/p 均无效。查看 json lint jsonlint.com
  • 抱歉,更新了输入。输出是否必须是 JSON 格式?如果可能的话,我想通过 JQ 生成一个数组,然后在我的 bash 脚本中迭代它。
  • jq 无法产生这样的预期输出。你需要一个对象数组
  • 尽管@Inian 声称 jq 不能产生您想要的输出的说法并不真实,但您所要求的格式是否非常有用是值得怀疑的。既然您提到您想要适合在 bash 脚本中使用的输出,为什么不告诉我们更多关于实际问题的信息?

标签: jq


【解决方案1】:

以下程序产生如下所示的输出:

def q: "\"\(.)\"";

.[]
| to_entries[]
| (.key|q) as $k
| if .value|type == "array"
  then .value[] | "\($k): \(q)"
  else "\($k): \(.value|q)"
  end

输出:

"a": "A"
"b": "123"
"c": "C1"
"c": "C2"

这个,或者非常类似的东西,应该足以在 bash 脚本中使用,但是如果你真的想要 Q 中显示的格式,请随意摆弄。一个更有用的消磨时间的方法可能是阅读 jq-bash 互操作性,例如在这里:

...还有很多其他的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-23
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2019-06-18
    • 2022-01-04
    • 1970-01-01
    相关资源
    最近更新 更多