【问题标题】:How to convert a Record type to string in-line with Ballerina?如何使用 Ballerina 将 Record 类型转换为字符串?
【发布时间】:2018-10-07 15:11:40
【问题描述】:

我有一个芭蕾舞演员record 类型如下。

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

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

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

在上面,Flightjson 错误使用 but 处理。 jsonstring 错误被省略检查。但它仍然给出以下错误。

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

似乎 Ballerina 没有将 &lt;json&gt; flight but {error =&gt; {}} 视为一个整体,它只返回一个 json,但是,&lt;json&gt; flight 返回 jsonerror。如果这是 Java,我可以简单地用括号 check &lt;string&gt; (&lt;json&gt; flight but {error =&gt; {}}) 将它们括起来。但是,这似乎也不起作用。

我的问题是,我已经尝试过的失败是否合乎逻辑(公平)?我们可以在线进行吗?

【问题讨论】:

    标签: ballerina


    【解决方案1】:

    在芭蕾舞演员中,如果要将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);
    }
    

    【讨论】:

      【解决方案2】:

      是和不是。

      是的,根据规范内联是合法的,不,它还没有实现,我想我们可以期待它很快就会实现。

      正如@Kishanthan 在他的回答中提到的,有两种方法可以将 Json 转换为字符串,但当前的 Ballerina 实现不允许它们在一行中使用。

      根据 Ballerina 规范,string jStr = (&lt;json&gt; flight but {error =&gt; &lt;json&gt; ""}).toString(); 是合法的,甚至 &lt;json&gt; flight but {error =&gt; &lt;json&gt; ""}.toString(); 似乎也是合法的。目前 ballerina 编译器似乎不允许对表达式进行方法调用,它只支持对变量引用的方法调用。

      您可以在https://ballerina.io/learn/ 下找到当前版本的规范。

      【讨论】:

        【解决方案3】:

        将记录转换为 json: json|error flightJson = json.convert(flight);

        将记录转换为地图: map&lt;anydata&gt;|error flightMap = map&lt;anydata&gt;.convert(flight);

        将 json 转换为记录: Flight|error flight = Flight.convert(flightJson);

        将 json 转换为字符串: string flightString = flightJson.toString();

        目前没有从记录到字符串的转换。您需要通过 json 或 map 处理潜在的错误,或者按照上面的建议使用 sprintf。

        Look this example

        【讨论】:

        猜你喜欢
        • 2018-11-01
        • 2019-03-16
        • 1970-01-01
        • 2012-09-19
        • 1970-01-01
        • 2022-08-18
        • 1970-01-01
        • 1970-01-01
        • 2019-09-10
        相关资源
        最近更新 更多