问题描述
向端点发出 Get-Request 请求后,我逐键解析返回的 Json 字符串,这很有效。当我尝试将返回的日期 ('createdAt') 转换为日期类型时,就会出现问题。
我收到的错误
Die Konvertierung von Microsoft.Dynamics.Nav.Runtime.NavJsonValue in Microsoft.Dynamics.Nav.Runtime.NavDate 不是最新的。
翻译过来就是:
无法从 NavJsonValue 转换为 NavDate
我解析的 Json
{
"entryNo": "2","title": "TEST","description": "Test Item","websiteUrl": "Test Url","createdAt": "14.01.2021"
}
相关代码
_testEntry.CreatedAt := GetJsonToken(jsonObject,'createdAt').AsValue().AsDate();
local procedure GetJsonToken(jsonObject: JsonObject; tokenKey: Text) jsonToken: JsonToken;
begin
if not jsonObject.Get(tokenKey,jsonToken) then
exit;
end;
解决方法
返回的日期格式不是有效的 JavaScript 格式,这是 AsDate()
所期望的。
如果您控制端点,则应将日期格式更改为 YYYY-MM-DD
。
如果您无法控制端点,则需要解析日期值:
local procedure ParseDate(Token: JsonToken): Date
var
DateParts: List of [Text];
Year: Integer;
Month: Integer;
Day: Integer;
begin
// Error handling omitted from example
DateParts := Token.AsValue().AsText().Split('.');
Evaluate(Day,DateParts.Get(1));
Evaluate(Month,DateParts.Get(2));
Evaluate(Year,DateParts.Get(3));
exit(DMY2Date(Day,Month,Year));
end;