json - jq:用列表包裹所有一级原子值

标签 json jq

假设我们有一个 JSON:

{
 "a" : 23,
 "b" : "hi",
 "c": [90],
 "d": [{"j" : 80}]
}

我想把它转换成

{
 "a" : [23],
 "b" : ["hi"],
 "c": [90],
 "d": [{"j" : 80}]
}

如何使用 jq 执行此操作?

最佳答案

您可以根据值的类型使用if语句更新|=每个字段.[] :

.[] |= if type == "array" then . else [.] end
{
  "a": [
    23
  ],
  "b": [
    "hi"
  ],
  "c": [
    90
  ],
  "d": [
    {
      "j": 80
    }
  ]
}

Demo

除了检查 typearray 相比,您还可以只更新 scalars,它们都是不可迭代的,即没有数组和没有对象:

(.[] | scalars) |= [.]
{
  "a": [
    23
  ],
  "b": [
    "hi"
  ],
  "c": [
    90
  ],
  "d": [
    {
      "j": 80
    }
  ]
}

Demo

关于json - jq:用列表包裹所有一级原子值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73385429/

相关文章:

java - 持久的 JSON 内容

python - 在 Python 中将 JSON 数据存储在 Aerospike 中

json - JQ 从编码字段内部替换 "\n"

bash - 使用 jq 在 bash 中序列化和反序列化关联数组

用于在范围之间循环 if 的 Javascript

php - 相对较大的 JSON 文件的服务器端和客户端缓存

javascript - 如何将当前时序与两个时序进行比较

json - 从 json 获取字段并分配给 bash 脚本中的变量?

json - 在 bash 中使用 jq 查找并合并所有 package.json 文件?

json - 根据子对象数组中的值进行选择