Преобразование записи в формат JSON, содержащий время: тип времени (или любой другой тип объекта) - PullRequest
0 голосов
/ 31 августа 2018

при разработке приложения с 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;
};

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Это сделано намеренно, поскольку во время преобразования объекта в 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 в данный момент. Вы можете запросить эту функцию здесь .

0 голосов
/ 03 сентября 2018

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

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

...