接口把 false 写成字符串后,怎样验收布尔值与枚举类型

2026-10-24

JSON的false、字符串”false”、数字0、null与缺字段是不同输入,不能统一用真假转换解释设备状态。尤其在JavaScript中,非空字符串”false”会被当成真值。验收应逐字段核对类型和枚举取值,遇到未知类型显示契约错误或未知状态,避免把不认识的值默认为“设备已开”。

环境和证据范围

本文定义一个合成契约:enabled必须为布尔值,mode只能是auto或manual。JSON规范只规定值类型,不替设备定义字段;具体设备确实使用0/1或字符串状态时,应按其文档显式转换。这里不调用真实API,也不测试任何产品的界面。

核对顺序

  1. 从设备文档提取字段名、类型、可空性、是否允许缺省和枚举集合,将这些要求写在点表。不要从一次响应猜测所有状态,更不要在多个接口之间默认enabled含义一致。

  2. 先检查成员是否存在,再检查null,再检查精确类型。Python中bool是int的子类,因此脚本使用type(v) is bool;跨语言实现也要避免宽松比较把0或1混进布尔分支。

  3. 类型正确后再判断业务值与枚举。未知mode应被记录,不能自动落到manual;这样设备升级增加枚举时,接口变化才会暴露,而不是静默进入错误模式。

  4. 加入正确false、字符串false、数字0、null、缺字段和未知枚举六组输入,逐条核对状态文本。真实现场还要检查适配器是否在日志打印前已经做了强制转换,必要时保存原始JSON字节。

可复算的输入与预期

六个合成输入的期望分别是“有效关闭”“布尔类型错误”“布尔类型错误”“不允许null”“缺字段”“未知枚举”。合法false必须得到关闭,不能因为if语句把它当成缺值。mode合法但enabled错误时,先报告enabled错误,保持校验顺序可复现。

下载与现场记录

下载本题合成输入与预期JSON、离线只读核验脚本和现场空白记录CSV。放在同一目录,用 Python 3 运行 python verify.py,逐项计算或解析后与预期比较,失败会显示差异。

现场字段包括 field、raw_value、json_type、allowed_enum、validator_version、decision。合成样例保持原样,实测另存并填写型号、版本、证据路径,未采集处留空。本地核验不代表真实设备、代理、浏览器或长期稳定性已测。

失败分支与移交

把Boolean(value)、!!value或宽松比较当数据清洗,会让非空错误文本也成为真。简单用value or default又会把合法0、false替换掉。若厂商文档真的混用类型,应写出明确兼容表并保留原值,而不是把所有输入转换成字符串后比较。

交接应附完整枚举、缺字段策略、版本兼容表和未知输入样本。真实设备升级后先跑这组契约回归,再观察运行状态;客户端拒绝一个新枚举并不代表设备损坏,而是双方契约需要核实。错误状态也应有可检索日志,便于现场定位具体字段。

基础背景可看HTTP / RESTful 设备控制接口科普。数字字段即使类型正确也可能损失精度,见JSON 设备编号超过安全整数后,怎样避免浏览器悄悄改号。更多资料在设备协议库。

需要接入中控时,可对照SoftControl设备联动需求核实适配范围;独立校验方法是否纳入交付需逐项约定。

一级资料

核对日期:2026-10-24。规范定义与本文应用约定分开,示例门限及脚本不自动代表产品原生能力。

需要展厅软硬件方案或定制开发?

加微信,把这一页发到你手机上

扫码加站长企业微信,会自动把这一页的链接发给你。问软件授权、报价,或者现场遇到问题,也可以直接聊。

去留微信

留言讨论

评论发布后会被人工复核,违规内容将被删除。

    还没有人评论,来说说你的看法

    如果发表没有反应,可以前往联系我们告诉我们。

    这个页面有问题?

    提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。