MarkLogicRESTAPI、JSON和inifinity

MarkLogicRESTAPI、JSON和inifinity,marklogic,Marklogic,我想知道是否有其他人遇到过这个问题,是否有一个快速的解决办法。RESTAPI的JSON解析器似乎没有将术语“无限”和“NaN”视为字符串,因此任何包含这些术语的查询或结果都会导致错误 此查询: /v1/search?q=infinity&format=json 导致此错误的原因: <error-response xmlns="http://marklogic.com/xdmp/error"> <status-code>400</status-code

我想知道是否有其他人遇到过这个问题,是否有一个快速的解决办法。RESTAPI的JSON解析器似乎没有将术语“无限”和“NaN”视为字符串,因此任何包含这些术语的查询或结果都会导致错误

此查询:

/v1/search?q=infinity&format=json
导致此错误的原因:

<error-response xmlns="http://marklogic.com/xdmp/error">
   <status-code>400</status-code>
   <status>Bad Request</status>
   <message-code>XDMP-JSONCHAR</message-code>
   <message>
      XDMP-JSONCHAR: xdmp:unquote("{&quot;snippet-format&quot;:&quot;snippet&quot;,&quot;total&quot...") -- Unexpected character 'I' in JSON at line 1 char 668
   </message>
</error-response>

400
错误的请求
XDMP-JSONCHAR
XDMP-JSONCHAR:XDMP:unquote(“{”代码段格式“:“代码段”,“总计”…)--JSON中第1行字符668处的意外字符“I”
在我的例子中,snippet函数会突出显示单词“infinity”,因此如果它单独作为一个元素值,JSON解析器会将其解释为数字类型


我们使用的是MarkLogic Server 8.0-6.4。我在各种REST API应用程序上尝试过这一点,并得到了相同的结果。

MarkLogic理解符号
无穷大(注意大写字母I)。您可以使用该符号或计算结果为该值的表达式将JavaScript属性的值设置为此值。查看该值时,您将看到一个字符串“INF”:

返回

{
  "bar": "INF"
}
关于将此值与其他值进行比较的一些观察结果:

  • foo.bar==“INF”
    :false
  • foo.bar===Infinity
    :true
  • foo.bar==“Infinity”
    :true(
    =
    转换为适当的类型)
  • foo.bar===“无限”
    :false(
    ==
    不转换)
下一步,我序列化了一个已测试的查询,以确保它与上面的测试文档匹配:

xdmp.toJsonString(cts.jsonPropertyValueQuery('bar', Infinity))
我将其包装在一个
{“ctsquery”:{}}
(虽然不太容易找到)

http://localhost:8011/v1/search?database=Documents&structuredQuery={"ctsquery":{"jsonPropertyValueQuery":{"property":["bar"],"value":["INF"],"options":["lang=en"]}}}
我认为这是JavaScript对象和JSON(JavaScript对象的序列化)之间的区别

称为“”的ECMA标准中有这样一句话:

“不允许使用不能表示为数字序列的数值(如无穷大和NaN)”


谢谢Dave。原来这是一个已知的bug,在版本9中已经修复。
http://localhost:8011/v1/search?database=Documents&structuredQuery={"ctsquery":{"jsonPropertyValueQuery":{"property":["bar"],"value":["INF"],"options":["lang=en"]}}}