如何将JSValue转换为布尔值?

How to convert JSValue to Boolean?

提问人:Shaun Roselt 提问时间:11/8/2023 最后编辑:Ken WhiteShaun Roselt 更新时间:11/13/2023 访问量:117

问:

我正在使用 ,然后将响应字符串解析为 ,但是当我尝试从 中获取值时,它以 .我需要获取它并将其存储在 Delphi 变量中。TWebHttpRequestTJSObjectTJSObjectJSValueJSValueBoolean

这是我的代码:

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'])BooleanBoolean


我尝试做一个 ,但这不起作用:.AsBoolean

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

然后我得到的错误是:

[错误] 在“Properties:JSValue”之后非法限定符“.”


那么,我怎样才能将其转换为 ?JSValueBoolean

德尔福 布尔 TMS TMS-Web-Core

评论


答:

-2赞 Shaun Roselt 11/8/2023 #1

如果你知道属性的值是 肯定的,那么你可以直接将其转换为:BooleanBoolean

loginSuccess := Boolean(JS.Properties['loginSuccess']);
-1赞 AmigoJack 11/8/2023 #2

根据 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 或 )。truefalsenullundefined

我还没有找到它的实际定义,只有 DefinedClassesWebKit.pas 行 #168

JSValue = objcclass external;

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

评论

0赞 Shaun Roselt 11/8/2023
我现在刚刚检查过。我要回来了,而不是.所以我没有使用 from .这是另一回事。JSValueTJSValueTJSValuejbase
0赞 Shaun Roselt 11/8/2023
在 TMS 上使用不起作用。我更新了我的问题以反映这一点。.AsBooleanJSValue