我的芭蕾舞女演员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 => {}}
视为只返回json
的整体,而是<json> flight
却返回了json
或error
。如果这是Java,我可以用括号check <string> (<json> flight but {error => {}})
将它们括起来。但是,这似乎也不起作用。
我的问题是,使我已经尝试过的事情失败是否合乎逻辑(合理)?我们可以在线进行此操作吗?
答案 0 :(得分:2)
在芭蕾舞女演员中,如果要将json
转换为string
,则必须在json变量上使用内置的toString()
函数。
因此,如果您的要求是先将记录转换为json
,然后再转换为string
,则以下示例代码会有所帮助。如果您想直接将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);
}
答案 1 :(得分:2)
是,不是。
是的,按照规范进行内联是合法的,不,它尚未实现,我想我们可以期望它会很快实现。
正如@Kishanthan在回答中提到的,有两种方法可以将Json转换为字符串,但是当前的Ballerina实现不允许它们在一行中使用。
根据芭蕾舞女演员的规定,string jStr = (<json> flight but {error => <json> ""}).toString();
是合法的,甚至<json> flight but {error => <json> ""}.toString();
似乎也是合法的。目前,芭蕾舞女演员编译器似乎不允许在表达式上进行方法调用,它仅支持在变量引用上进行方法调用。
您可以在https://ballerina.io/learn/下找到规范的当前版本。
答案 2 :(得分:0)
将记录转换为json:
json|error flightJson = json.convert(flight);
将记录转换为地图:
map<anydata>|error flightMap = map<anydata>.convert(flight);
将json转换为Record:
Flight|error flight = Flight.convert(flightJson);
将json转换为字符串:
string flightString = flightJson.toString();
当前没有从Record到string的转换。您需要通过json或map进行处理,并处理潜在的错误,或者按照上面的建议使用sprintf。