You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jq动态转换JSON结构 递归调整typography节点格式

jq 递归转换JSON结构方案

以下实现无需提前预知除value、type外的任意键名,支持任意嵌套层级的自动匹配转换,不满足匹配规则的内容会完全保留原有状态:

可直接执行的命令(jq 1.6+ 版本,目前大部分环境内置的jq都满足版本要求)

jq '
walk(
  if type == "object" and has("value") and has("type") and (.value | type) == "object" then
    .type as $typ | .value | with_entries(.value = {value: .value, type: $typ})
  else
    .
  end
)
' 你的输入文件路径.json

实现逻辑说明

  • 借助jq内置walk函数递归遍历JSON所有层级的节点,不会遗漏任意嵌套位置的待转换结构
  • 节点匹配规则严格对齐需求:仅当节点为对象、同时存在value和type两个固定键、且value字段对应的值为对象时,才触发转换
  • 转换时先缓存当前节点的type值,再遍历value对象下的所有动态键,将每个键的值包装为{value: 原始属性值, type: 缓存的type值}结构
  • 所有不满足匹配规则的节点(数组、原始值、不符合结构的对象)直接原样返回,无任何修改

低版本jq兼容方案(无内置walk时使用)

如果你的环境jq版本低于1.6,使用补全walk定义的完整命令即可:

jq '
def walk(f):
  . as $node |
  if type == "object" then
    reduce keys_unsorted[] as $k ({}; .[$k] = $node[$k] | walk(f)) | f
  elif type == "array" then
    map(walk(f)) | f
  else f end;
walk(
  if type == "object" and has("value") and has("type") and (.value | type) == "object" then
    .type as $typ | .value | with_entries(.value = {value: .value, type: $typ})
  else . end
)
' 你的输入文件路径.json

用提供的示例输入执行上述命令,输出和目标结构完全一致。

内容的提问来源于stack exchange,提问作者phil88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 22:27:24