将记录转换为包含 time:Time 类型(或任何其他对象类型)的 JSON
Conversion of a record towards JSON containing a time:Time type (or any other object type)
在使用 Ballerina 开发应用程序时,我使用记录类型来定义 'Event' 数据结构。
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;
};
我相信这是预期的方式。这允许访问您时间的各个组件,因为它是时间类型而不是字符串。
如果你需要一个字符串,你的字段应该是一个字符串类型的字段,它的值可以使用 time.toString() 方法
填充
这是故意的,因为在对象到 json 或记录到 json 的转换过程中,public 字段被转换为 json 键值对。 time:createTime
方法returns Ballerina中的一个Time
对象,其定义可以在以下位置查看:
当它转换为 json 时,它的 public 字段被转换为键值对。 Timezone
的 public 字段也根据其 public 字段递归地转换为键值对。
此行为与 json 到 record/map 的转换一致。
目前无法将对象的行为更改为 json 转换。您可以请求此功能 here.
在使用 Ballerina 开发应用程序时,我使用记录类型来定义 'Event' 数据结构。
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;
};
我相信这是预期的方式。这允许访问您时间的各个组件,因为它是时间类型而不是字符串。
如果你需要一个字符串,你的字段应该是一个字符串类型的字段,它的值可以使用 time.toString() 方法
填充这是故意的,因为在对象到 json 或记录到 json 的转换过程中,public 字段被转换为 json 键值对。 time:createTime
方法returns Ballerina中的一个Time
对象,其定义可以在以下位置查看:
当它转换为 json 时,它的 public 字段被转换为键值对。 Timezone
的 public 字段也根据其 public 字段递归地转换为键值对。
此行为与 json 到 record/map 的转换一致。
目前无法将对象的行为更改为 json 转换。您可以请求此功能 here.