Как преобразовать тип записи в строку в строке с балериной? - PullRequest
0 голосов
/ 07 октября 2018

У меня есть тип балерины 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 => {}}).Но, похоже, это тоже не работает.

Мой вопрос: логично (справедливо) потерпеть неудачу в том, что я уже пробовал?Можем ли мы сделать это in-line?

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

Да и нет.

Да, это законно, чтобы встроить в соответствии со спецификацией, нет, это еще не реализовано, я думаю, мы можем ожидать, что это будет реализовано в ближайшее время.

Как @KishanthanВ своем ответе упоминается, что есть два способа преобразования Json в строку, но текущая реализация Ballerina не позволяет использовать их в одной строке.

Согласно спецификации Ballerina, string jStr = (<json> flight but {error => <json> ""}).toString(); допустимо, черт возьми, даже <json> flight but {error => <json> ""}.toString(); кажется законным.В настоящее время компилятор-балерина не разрешает вызовы методов для выражения, он поддерживает только вызовы методов для ссылки на переменную.

Текущую версию спецификаций можно найти в https://ballerina.io/learn/.

0 голосов
/ 06 июня 2019

конвертировать запись в 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 или map и разобраться с потенциальной ошибкой s, или использовать sprintf, как предложено выше.

Посмотрите этот пример

0 голосов
/ 08 октября 2018

В балерине, если вы хотите преобразовать json в string, вам нужно использовать встроенную функцию toString() для переменной json.

Так что, если вам необходимо сначала преобразоватьзапись в 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);
}
...