wst*_*wst 3 json xquery marklogic marklogic-8
同名的 XML 元素和 JSON 属性可能是同级元素。IE:
<container>
<value>value1</value>
<value>value2</value>
</container>
Run Code Online (Sandbox Code Playgroud)
和
object-node {
"value" : "value1",
"value" : "value2"
}
Run Code Online (Sandbox Code Playgroud)
两者都是有效的,但我还没有找到一种有效的方法将一个转换为另一个。在构造函数中动态构建属性是无效的object-node,即:
object-node {
for $v in $values
return 'value' : $v
}
Run Code Online (Sandbox Code Playgroud)
使用映射不起作用,因为重复的键名称已折叠:
xdmp:to-json(map:new((
map:entry("value", "value1"),
map:entry("value", "value2")))
)
=> {"value":"value2"}
Run Code Online (Sandbox Code Playgroud)
当使用 时json:object,最后一个键值会被重复:
json:object(<json:object>
<json:entry key="value">
<json:value>value1</json:value>
</json:entry>
<json:entry key="value">
<json:value>value2</json:value>
</json:entry>
</json:object>)
=> {"value":"value2", "value":"value2"}
Run Code Online (Sandbox Code Playgroud)
使用运算符连接映射+更好,但它将重复的键合并为具有值数组 ( {"value":["value1", "value2"]}) 的单个键,这仍然不是我想要的。有没有办法在 XQuery 中动态构建同名的同级 JSON 属性?
您的 JSON 示例:
object-node {
"value" : "value1",
"value" : "value2"
}
Run Code Online (Sandbox Code Playgroud)
并不真正有效:或者无论如何,最好避免它。RFC 7159 说:
当对象内的名称不唯一时,接收此类对象的软件的行为是不可预测的。许多实现仅报告姓/值对。其他实现报告错误或无法解析对象,而某些实现报告所有名称/值对,包括重复项。
| 归档时间: |
|
| 查看次数: |
1306 次 |
| 最近记录: |