假设我们有一个JSON:

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

我想把这个换成

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

我如何使用jq来完成此操作?

推荐答案

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

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

Demo

您也可以只更新scalars,它们都是不可迭代的,即没有数组和对象:

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

Demo

Json相关问答推荐

JOLT转换过滤出特定值/对象

如何在PowerShell中扩展JSON中的嵌套数组

如何在数组抖动中按值分组

如何形成正确的JQ表达式以从JSON文件中获得准确的输出数据?

使用更高级别架构中的字段值在$def内实现约束

如何创建可由Gin序列化到json的排序键值映射?

创建Json嵌套文件 struct

VBA json按特定属性名称提取所有数据

使用JQ将对象数组转换为平面数组

交换键和数组值,将旧键转换为新数组值,使用 jq

jq 对特定键进行过滤并将值整理到单个 csv 单元格中

GitHub Pages无法正确显示我的项目

Jolt 转换数组对象并将某些字段移动到嵌套数组

如何在 JSonPath 中按值查找列表中的所有元素

如何将 JSON 文本作为参数传递给 powershell?

如何在 Apps 脚本中循环遍历 JSON 响应

修改 boost::json::object 中的值

坚持弄清楚如何使用 api 响应来调用以从不同的链接检索响应

.NET CORE 3 升级 CORS 和 Json(cycle) XMLHttpRequest 错误

Spring Security 和 JSON 身份验证