Json 与 Ballerina 中的 Var 用法对比

Json vs Var usage in Ballerina

如果我们有一个如下声明的json变量,我们可以直接使用.toString()。背后的逻辑是什么?

json a1 = {"a":"a", "b":"b"};
string c = a1.toString();

但是如果我们有一个如下声明的 var,我们就不能使用 .toString()。

table dt ;
...
var jsonConversionRet = <json>dt;
jsonConversionRet.toString(); // throws error "function invocation on type 'json|error' is not supported"

在 Ballerina 类型转换中 returns 所需类型和错误类型的联合类型。 参见:union type。这意味着 Ballerina 编译器推断的类型是 json|错误。

您必须使用匹配项并明确处理成功路径和失败路径。

var jsonConversionRet = <json>dt;
match (jsonConversionRet) {
    json j => j.toString();
    error err => io:println("error: " + err.message);
}