首页 > 解决方案 > 如何在 Ballerina 中解构/匹配 json 类型?

问题描述

为了json在出现错误的情况下返回默认值,我编写了以下函数,我试图对json|error芭蕾舞演员 0.991.0 中的类型使用 match 语句

这个:

function jsonIt(json|error myJson)returns json{
    match myJson {
        var error(detail,message) => return {};            
        _ => return {};
    }
}

编译(为了论证而忽略吞噬的错误),但显然不返回 json 值。

这个:

function jsonIt(json|error myJson)returns json{
    match myJson {
        json j  => return j;
        var error(detail,reason) => return {};
    }
}

不会编译 =>extraneous input 'json'

基本上,我找不到任何方法来匹配可能的json类型。我试过了:

json mj=> return mj;

var mj => return mj; //doesn't limit type to json

和其他一些人。基本上,我找不到一种方法来匹配 json 类型,或者解构它类似于error(d,m)

虽然这个问题是独立存在的,但提出一种更惯用的方式来实现这一点也将不胜感激。

标签: ballerina

解决方案


根据您的问题描述,我认为您正在尝试在这里进行类型切换。即,检查一个值是否属于特定类型。对于这个用例,您可以在 Ballerina 中使用类型测试表达式。以下两种方法应该有效。

function jsonIt(json | error myJson) returns json {
    if (myJson is json) {
       return myJson;
    } else {
       return {};
    }
}

使用三元运算符

function jsonIt(json | error myJson) returns json {
    return (myJson is json) ? myJson :{};
}

match语句执行值切换。即,根据值匹配的模式选择要执行的块


推荐阅读