如何将记录类型转换为与芭蕾舞演员串联的字符串?

时间:2018-10-07 15:11:40

标签: ballerina

我的芭蕾舞女演员record类型如下。

type Flight record {
    int flightNo;
    string airline;
    int price;
    !...
};

我想在一行中将其转换为字符串。在下面尝试过,但会给出编译错误。

log:printDebug("Response : " + check <string> <json> flight but {error => {}});

在上面,使用Flight处理了jsonbut的错误。选中jsonstring的错误将被忽略。但是它仍然给出以下错误。

incompatible types: 'json|error' cannot be converted to 'string'

看来,芭蕾舞女演员并没有将<json> flight but {error => {}}视为只返回json的整体,而是<json> flight却返回了jsonerror。如果这是Java,我可以用括号check <string> (<json> flight but {error => {}})将它们括起来。但是,这似乎也不起作用。

我的问题是,使我已经尝试过的事情失败是否合乎逻辑(合理)?我们可以在线进行此操作吗?

3 个答案:

答案 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。

Look this example