提问人:Shaun Roselt 提问时间:11/8/2023 最后编辑:Ken WhiteShaun Roselt 更新时间:11/13/2023 访问量:117
如何将JSValue转换为布尔值?
How to convert JSValue to Boolean?
问:
我正在使用 ,然后将响应字符串解析为 ,但是当我尝试从 中获取值时,它以 .我需要获取它并将其存储在 Delphi 变量中。TWebHttpRequest
TJSObject
TJSObject
JSValue
JSValue
Boolean
这是我的代码:
LoginAPI.Execute(
procedure(AResponse: string; AReq: TJSXMLHttpRequest)
var
JS: TJSObject;
loginSuccess: Boolean;
begin
JS := TJSJSON.parseObject(AResponse);
loginSuccess := JS.Properties['loginSuccess'];
console.log(loginSuccess);
end
);
我收到以下错误:
[错误]不兼容的类型:得到“JSValue”应为“Boolean”
当我尝试获取值并将其放入变量中时,会发生此错误。loginSuccess := JS.Properties['loginSuccess']
Boolean
当我这样做时,我可以看到该值在浏览器控制台中肯定是 a。所以我只需要知道如何在德尔福中获取它。console.log(JS.Properties['loginSuccess'])
Boolean
Boolean
我尝试做一个 ,但这不起作用:.AsBoolean
loginSuccess := JS.Properties['loginSuccess'].AsBoolean;
然后我得到的错误是:
[错误] 在“Properties:JSValue”之后非法限定符“.”
那么,我怎样才能将其转换为 ?JSValue
Boolean
答:
如果你知道属性的值是 肯定的,那么你可以直接将其转换为:Boolean
Boolean
loginSuccess := Boolean(JS.Properties['loginSuccess']);
根据 pas2js 的文档,可以通过将其与布尔文字进行比较来强制执行其布尔值:
var
jso: TJSObject;
jsv: JSValue;
b: Boolean;
begin
...
jsv:= jso.Properties['any'];
b:= !(jsv== false); // Value equals Boolean FALSE? Invert whole meaning.
只有当你知道自己在做什么时,才应该进行强制转换 - 但由于 JavaScript 的性质,不能保证任何内容的计算结果总是为 either 或没有任何进一步的状态(like 或 )。true
false
null
undefined
我还没有找到它的实际定义,只有 DefinedClassesWebKit.pas 行 #168:
JSValue = objcclass external;
...这意味着实际定义在别处。由于 s,我怀疑二进制文件而不是源代码。{$modeswitch}
评论
JSValue
TJSValue
TJSValue
jbase
.AsBoolean
JSValue
评论