delphi 如何将JSValue转换为Boolean?

nc1teljy  于 2023-11-18  发布在  其他
关注(0)|答案(2)|浏览(116)

我正在使用TWebHttpRequest进行API调用,然后将响应字符串解析为TJSObject,但是当我试图从TJSObject获取值时,它返回为JSValue。我需要将此JSValue存储在 Delphi 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”
当我尝试获取值并将其放入Boolean变量时,loginSuccess := JS.Properties['loginSuccess']上发生了此错误。
当我执行console.log(JS.Properties['loginSuccess'])时,我可以在浏览器控制台中看到该值肯定是Boolean。所以我只需要知道如何在 Delphi 中将其作为Boolean获取。
我试着做了一个.AsBoolean,但它不工作:

loginSuccess := JS.Properties['loginSuccess'].AsBoolean;


我得到的错误是:
[错误]“Properties:JSValue”后的非法限定符“.”
如何将JSValue转换为Boolean

tez616oj

tez616oj1#

根据pas 2 js的文档,它的布尔值可以通过与布尔值进行比较来实现:

var
  jso: TJSObject;
  jsv: JSValue;
  b: Boolean;
begin
  ...
  jsv:= jso.Properties['any'];
  b:= !(jsv== false);  // Value equals Boolean FALSE? Invert whole meaning.

字符串
只有当你知道你在做什么的时候才应该进行转换--但是由于JavaScript的本质,不能保证任何东西在没有任何进一步状态的情况下总是计算为truefalse(比如nullundefined)。
我还没有找到它的实际定义,只有DefinedClassesWebKit.pas第168行:

JSValue = objcclass external;


.这意味着实际的定义在其他地方。由于{$modeswitch} s,我怀疑是二进制文件而不是源代码。

7fyelxc5

7fyelxc52#

如果你知道属性的值肯定是Boolean,那么你可以像这样直接将它转换为Boolean

loginSuccess := Boolean(JS.Properties['loginSuccess']);

字符串

相关问题