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

Ballerina是否支持类XML导航的JSON嵌套键访问方式?

在Ballerina中访问JSON任意嵌套层级的指定键

在Ballerina中,没有像XML的/**/<name>那样的原生简洁选择器语法,但可以通过两种方式实现任意嵌套层级下指定键的访问,其中第二种方式的语义和XML写法高度一致:

  • 方式一:自定义递归函数遍历
    通过递归遍历JSON的所有层级,收集目标键对应的值,适用于所有Ballerina版本:
import ballerina/io;

public function main() {
    json data = {
        "level1": {
            "target": "value1",
            "level2": {
                "target": "value2",
                "level3": {"target": "value3"}
            }
        },
        "target": "value0"
    };

    json[] results = collectNestedValues(data, "target");
    io:println(results); // 输出 [value0, value1, value2, value3]
}

function collectNestedValues(json j, string key) returns json[] {
    json[] values = [];
    if j is record {|...|} {
        if key in j {
            values.push(j[key]);
        }
        foreach var [k, v] in j.entries() {
            values = values.concat(collectNestedValues(v, key));
        }
    } else if j is json[] {
        foreach json item in j {
            values = values.concat(collectNestedValues(item, key));
        }
    }
    return values;
}
  • 方式二:使用json:query模块的递归查询语法
    Ballerina 2201.4.0及以上版本支持json:query模块,其中$..<key>语法和XML的/**/<name>语义完全一致,可直接匹配任意嵌套层级的指定键:
import ballerina/io;
import ballerina/json;

public function main() {
    json data = {
        "level1": {
            "target": "value1",
            "level2": {
                "target": "value2",
                "level3": {"target": "value3"}
            }
        },
        "target": "value0"
    };

    json result = check json:query(data, "$..target");
    io:println(result); // 输出 ["value0","value1","value2","value3"]
}

注:$..target中的$代表根JSON对象,..表示递归遍历所有后代节点,最终匹配所有名为target的键。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:47:42