我在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"仍然可以匹配?
答案 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