MarkLogic按示例查询 - JSON键中的下划线不起作用?

时间:2015-02-04 13:48:43

标签: java marklogic

我在MarkLogic中以JSON格式输入以下条目:

{
   "identifier":"user1",
   "attributesList": [
      {
        "firstName": "James",
        "address_1": "Farcity"
      }
   ]
 }

如果,我将使用以下格式查询:

{
 $query:
 {
   "identifier":"user1",
   "attributesList": [
      {
        "firstName": "James"
      }
   ]
 }
}

这将匹配并返回预期结果,计数为1,因为" firstName"等于"詹姆斯"。

但是,如果我执行以下操作:

{
 $query:
 {
   "identifier":"user1",
   "attributesList": [
      {
        "address_1": "Farcity"
      }
   ]
 }
}

即使" address_1"也不会给予任何结果。完全符合" Farcity"。我已经在其他JSON密钥上尝试了这个,除了密钥中带有下划线的密钥外,它可以正常工作..这是一个保留字符吗?如果是这样,有没有办法逃避这个,以便键#34; address_1"或" county_state"仍然可以匹配?

2 个答案:

答案 0 :(得分:0)

看起来Json对象将下划线转换为双下划线

运行这个:

xquery version "1.0-ml";

import module namespace json="http://marklogic.com/xdmp/json"
 at "/MarkLogic/json/json.xqy";

let $j :=
 '{
   "identifier":"user1",
   "attributesList": [
      {
        "firstName": "James",
        "address_1": "Farcity"
      }
   ]
}'
return 
 json:transform-from-json( $j)

你会得到这个

<json type="object" xmlns="http://marklogic.com/xdmp/json/basic">
  <identifier type="string">user1</identifier>
  <attributesList type="array">
    <json type="object">
      <firstName type="string">James</firstName>
      <address__1 type="string">Farcity</address__1>
    </json>
  </attributesList>
</json>

因此请尝试使用双下划线查询。此外,如果您使用的是Marklogic 6或7,它会将Json转换为xml。所以你可以尝试使用XML格式通过示例进行查询。

答案 1 :(得分:-1)

有关用于将JSON字段名称映射到QNames的确切算法和函数,请参阅http://docs.marklogic.com/xdmp:encode-for-NCName