You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MarkLogic中如何用JSON Schema校验Number类型的NaN值?

解决MarkLogic JSON Schema校验不拦截NaN的问题

你遇到的问题核心是:MarkLogic的xdmp:json-validate-node默认将XQuery生成的NaN视为合法的JSON number类型(尽管标准JSON规范里并没有NaN),所以仅用"type": "number"的Schema规则无法拦截它,但TDE的decimal类型严格拒绝非有限数值,导致插入失败。

要让JSON Schema校验拦截NaN(包括Infinity和-Infinity这类特殊数值),可以在Schema中给number类型字段添加not约束,排除这些特殊值。具体做法是在age字段的规则里加入"not": {"enum": [NaN, Infinity, -Infinity]},在XQuery中需要用fn:NaN()、fn:number("Infinity")和fn:number("-Infinity")来构造这些值。

修改后的查询代码如下:

xquery version "1.0-ml";

let $node := object-node {
  "name": "test",
  "age": fn:number("fail")
  
}
let $schema := object-node {
  "properties": object-node {
    "name": object-node {  
      "type": "string"
    }, 
    "age": object-node{
        "type": "number",
        "not": object-node {
          "enum": array-node { fn:NaN(), fn:number("Infinity"), fn:number("-Infinity") }
        }
    }
  }
}
return xdmp:json-validate-node($node, $schema, "full")

执行这段代码后,就会返回预期的校验错误,拦截包含NaN的JSON文档,避免后续TDE插入失败的问题。

内容的提问来源于stack exchange,提问作者JayDip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:22:13