如何使用 Ballerina 将记录类型转换为字符串?
How to convert a Record type to string in-line with Ballerina?
我有一个芭蕾舞演员 record
类型如下。
type Flight record {
int flightNo;
string airline;
int price;
!...
};
我想在一行中将其转换为字符串。在下面尝试但给出了编译错误。
log:printDebug("Response : " + check <string> <json> flight but {error => {}});
在上面,Flight
到 json
错误是使用 but
处理的。 json
到 string
错误被检查省略。但它仍然给出以下错误。
incompatible types: 'json|error' cannot be converted to 'string'
芭蕾舞女演员似乎没有把 <json> flight but {error => {}}
作为一个整体 returns 只有一个 json
但是 <json> flight
其中 returns 或者 json
或 error
。如果这是 Java,我可以简单地用括号 check <string> (<json> flight but {error => {}})
将它们括起来。但是,这似乎也不起作用。
我的问题是,我已经尝试过的失败是否合乎逻辑(公平)?我们可以在线执行此操作吗?
在 ballerina 中,如果您想将 json
转换为 string
,则必须在 json 变量上使用内置的 toString()
函数。
因此,如果您的要求是先将记录转换为 json
,然后再转换为 string
,则以下示例代码会有所帮助。如果你想直接convert/format一个record
到string
,那么你可以使用第二种情况下给出的sprintf
函数,它可以将给定的记录格式化为字符串。
import ballerina/io;
type Flight record {
int flightNo;
string airline;
int price;
!...
};
public function main(string... args) {
Flight flight = {flightNo:1234, airline:"SL", price:54321};
// record to json and then to string
json j = check <json> flight;
string jStr = j.toString();
io:println(jStr);
// record to string
string rStr = io:sprintf("%s", flight);
io:println(rStr);
}
是也不是。
是的,根据规范内联是合法的,不,它还没有实现,我想我们可以期待它很快就会实现。
正如@Kishanthan 在他的回答中提到的,有两种方法可以将 Json 转换为字符串,但当前的 Ballerina 实现不允许它们在一行中使用。
根据 Ballerina 规范,string jStr = (<json> flight but {error => <json> ""}).toString();
是合法的,甚至 <json> flight but {error => <json> ""}.toString();
似乎也是合法的。目前 ballerina 编译器似乎不允许对表达式进行方法调用,它只支持对变量引用进行方法调用。
您可以在 https://ballerina.io/learn/ 下找到当前版本的规范。
将记录转换为 json:
json|error flightJson = json.convert(flight);
将记录转换为地图:
map<anydata>|error flightMap = map<anydata>.convert(flight);
将json转换为记录:
Flight|error flight = Flight.convert(flightJson);
将json转换为字符串:
string flightString = flightJson.toString();
目前没有从记录到字符串的转换。您需要通过 json 或映射并处理潜在的 错误 ,或者按照上面的建议使用 sprintf。
我有一个芭蕾舞演员 record
类型如下。
type Flight record {
int flightNo;
string airline;
int price;
!...
};
我想在一行中将其转换为字符串。在下面尝试但给出了编译错误。
log:printDebug("Response : " + check <string> <json> flight but {error => {}});
在上面,Flight
到 json
错误是使用 but
处理的。 json
到 string
错误被检查省略。但它仍然给出以下错误。
incompatible types: 'json|error' cannot be converted to 'string'
芭蕾舞女演员似乎没有把 <json> flight but {error => {}}
作为一个整体 returns 只有一个 json
但是 <json> flight
其中 returns 或者 json
或 error
。如果这是 Java,我可以简单地用括号 check <string> (<json> flight but {error => {}})
将它们括起来。但是,这似乎也不起作用。
我的问题是,我已经尝试过的失败是否合乎逻辑(公平)?我们可以在线执行此操作吗?
在 ballerina 中,如果您想将 json
转换为 string
,则必须在 json 变量上使用内置的 toString()
函数。
因此,如果您的要求是先将记录转换为 json
,然后再转换为 string
,则以下示例代码会有所帮助。如果你想直接convert/format一个record
到string
,那么你可以使用第二种情况下给出的sprintf
函数,它可以将给定的记录格式化为字符串。
import ballerina/io;
type Flight record {
int flightNo;
string airline;
int price;
!...
};
public function main(string... args) {
Flight flight = {flightNo:1234, airline:"SL", price:54321};
// record to json and then to string
json j = check <json> flight;
string jStr = j.toString();
io:println(jStr);
// record to string
string rStr = io:sprintf("%s", flight);
io:println(rStr);
}
是也不是。
是的,根据规范内联是合法的,不,它还没有实现,我想我们可以期待它很快就会实现。
正如@Kishanthan 在他的回答中提到的,有两种方法可以将 Json 转换为字符串,但当前的 Ballerina 实现不允许它们在一行中使用。
根据 Ballerina 规范,string jStr = (<json> flight but {error => <json> ""}).toString();
是合法的,甚至 <json> flight but {error => <json> ""}.toString();
似乎也是合法的。目前 ballerina 编译器似乎不允许对表达式进行方法调用,它只支持对变量引用进行方法调用。
您可以在 https://ballerina.io/learn/ 下找到当前版本的规范。
将记录转换为 json:
json|error flightJson = json.convert(flight);
将记录转换为地图:
map<anydata>|error flightMap = map<anydata>.convert(flight);
将json转换为记录:
Flight|error flight = Flight.convert(flightJson);
将json转换为字符串:
string flightString = flightJson.toString();
目前没有从记录到字符串的转换。您需要通过 json 或映射并处理潜在的 错误 ,或者按照上面的建议使用 sprintf。