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

能否在不使用对象构造的情况下,用JSONATA排除深层嵌套字段?

在JSONATA中无需手动构造对象即可排除深层嵌套字段?

问题背景

给定以下JSON数据:

{
    "collection": [
        {
            "id": "ABC",            
            "learningunit": {
                "metadata": {
                    "show": true,
                    "unitType": {
                        "code": "U",                        
                        "value": "Unit"
                    }                   
                }
            }
        },
        {
            "id": "UYE",            
            "learningunit": {
                "metadata": {
                    "show": false,
                    "unitType": {
                        "code": "C",                        
                        "value": "COURSE"
                    }                   
                }
            }
        }
    ]
}

需要移除show和value两个深层嵌套字段,得到目标结构:

{
    "collection": [
        {
            "id": "ABC",            
            "learningunit": {
                "metadata": {                   
                    "unitType": {
                        "code": "U"                     
                    }                   
                }
            }
        },
        {
            "id": "UYE",            
            "learningunit": {
                "metadata": {                   
                    "unitType": {
                        "code": "C"                     
                    }                   
                }
            }
        }
    ]
}

当前通过手动逐层构造对象的方式可以实现,但当JSON结构复杂时,这种写法会非常冗长繁琐:

{"collection":collection.
    {
    "id": id,
    "learningunit": learningunit.
        { 
            "metadata": metadata. 
            {
                "unitType": unitType.
                {
                    "code": code
                }
            }
        }
    }
} 

可行方案:使用JSONATA删除操作符

完全可以不用手动构造对象,用JSONATA的**删除操作符~**配合转换操作符~>就能快速移除指定字段,表达式简洁高效:

写法一:分两次指定路径删除

~> | collection[*].learningunit.metadata | ~"show" | ~> | collection[*].learningunit.metadata.unitType | ~"value" |

写法二:链式复用上下文删除

~> | collection[*].learningunit.metadata | ~"show" | ~> $ | .unitType | ~"value" |

原理说明

  • ~> 是JSONATA的转换操作符,用于对指定目标节点执行修改操作
  • | 目标路径 | 定位到需要修改的嵌套节点,比如collection[*].learningunit.metadata表示遍历collection数组中每个元素的learningunit.metadata节点
  • ~"字段名" 表示删除该节点下对应的字段,保留其他所有原有结构

这种方式无需重构整个对象,只需针对要删除的字段添加对应规则即可,结构越复杂,优势越明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:13:20