Преобразование записи в JSON, содержащей тип time:Time (или любой другой тип объекта)

при разработке приложения с Ballerina я использую тип записи для определения структуры данных «Событие».

public type Event record {
    string eventType;
    time:Time eventTime;
};

Что следует ожидать при преобразовании записи события в JSON и наоборот при преобразовании непростых значений в JSON?

Что я испытываю, так это то, что в качестве вывода создается строковое представление внутренней структуры поля объекта. На самом деле я ожидал, что при преобразовании в JSON будет вызван метод time.toString(). Является ли такое поведение преднамеренным и могу ли я повлиять на это поведение?

С уважением Роб

------ actual output --------------------------
2018-08-31 17:21:51,865 INFO  [] - {"eventType":"OrderAccepted", "eventTime":{"time":1535742000000, "zone":{"zoneId":"+02:00", "zoneOffset":7200}}}  

------ expected output ------------------------
2018-08-31 17:21:51,865 INFO  [] - {"eventType":"OrderAccepted", "eventTime": "2018-08-31T21:00:00+02:00"}

Используемый код балерины:

import ballerina/log;
import ballerina/time;

function main(string... args) {
    json je = testTimeToJson();
    log:printInfo(je.toString());
}

function testTimeToJson() returns json {
    Event event = {};
    event.eventType = "OrderAccepted";
    event.eventTime = time:createTime(2018, 8, 31, 21, 0, 0, 0, "+02:00");
    return check <json>event;
}

public type Event record {
    string eventType;
    time:Time eventTime;
};

person Rob    schedule 31.08.2018    source источник


Ответы (2)


Это сделано намеренно, поскольку во время преобразования объекта в json или записи в json общедоступные поля преобразуются в пары значений ключа json. Метод time:createTime возвращает объект Time в Ballerina, определение которого можно просмотреть в следующем месте:

https://github.com/ballerina-platform/ballerina-lang/blob/62ace431ac7d0645d117072216adc70eb16911d6/stdlib/time/src/main/ballerina/time/timelib.bal#L36

Когда он преобразуется в json, его общедоступные поля преобразуются в пары ключ-значение. Рекурсивно общедоступные поля Timezone также преобразуются в пары ключ-значение на основе его общедоступных полей.

Это поведение соответствует преобразованию json в запись/карту.

На данный момент невозможно изменить поведение преобразования объекта в json. Вы можете запросить эту функцию здесь.

person Riyafa Abdul Hameed    schedule 03.09.2018

Я считаю, что это намеченный путь. Это позволяет получить доступ к отдельным компонентам вашего времени, поскольку оно имеет тип time, а не строку.

Если вам нужна строка, ваше поле должно быть полем строкового типа, и его значение может быть заполнено с помощью метода time.toString().

person vinod    schedule 03.09.2018