MarkLogicRESTAPI、JSON和inifinity
我想知道是否有其他人遇到过这个问题,是否有一个快速的解决办法。RESTAPI的JSON解析器似乎没有将术语“无限”和“NaN”视为字符串,因此任何包含这些术语的查询或结果都会导致错误 此查询: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
/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("{"snippet-format":"snippet","total"...") -- 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"]}}}