使用 Xquery 在 Marklogic 中实现信封模式?
Implement a envelope pattern in Marklogic using Xquery?
我想在我的 json 数据中实现信封模式。我的数据看起来像这样
{
"id": "1",
"first_name": "Shawn",
"last_name": "Grant",
"email": "sgrant0@51.la",
"country": "Liberia",
"ip_address": "37.194.161.124"
}
我想实现这样的信封模式
{
"envelope": {
"Code" : "2023"
},
"source": {
"id": "1",
"first_name": "Shawn",
"last_name": "Grant",
"email": "sgrant0@51.la",
"country": "Liberia",
"ip_address": "37.194.161.124"
}
}
我尝试了下面的 xquery 代码,但效果不佳
xquery version "1.0-ml";
let $doc := fn:collection("transform")
for $i in $doc
let $object := json:object() --> I am struck here because i dont know how to create a envelope header
let $source := $i
return $source
感谢任何帮助
谢谢
如果您习惯 XML,那么 JSON 节点映射到 MarkLogic 中的 XQuery 数据模型的方式并不总是直观的。通常,直接使用对象节点可以减少一些混乱:
for $doc in fn:collection("transform")
let $source := $doc/object-node()
let $envelope :=
object-node {
"Code" : "2023"
}
return object-node {
"envelope" : $envelope,
"source" : $source
}
我喜欢 wst 描述的使用 json 节点构造函数的方法,但有时您需要动态添加属性,这对于那些构造函数来说可能很复杂。您还可以使用 json:object()
,它是 map:map()
的特化,或直接使用 map:map()
,并使用 xdmp:to-json
:[=15= 将其转换为 json 节点]
for $doc in fn:collection('transform')
return xdmp:to-json(map:new((
map:entry("envelope", map:new((
map:entry("Code", 2023)
))),
map:entry("source", $doc)
)))
HTH!
我想在我的 json 数据中实现信封模式。我的数据看起来像这样
{
"id": "1",
"first_name": "Shawn",
"last_name": "Grant",
"email": "sgrant0@51.la",
"country": "Liberia",
"ip_address": "37.194.161.124"
}
我想实现这样的信封模式
{
"envelope": {
"Code" : "2023"
},
"source": {
"id": "1",
"first_name": "Shawn",
"last_name": "Grant",
"email": "sgrant0@51.la",
"country": "Liberia",
"ip_address": "37.194.161.124"
}
}
我尝试了下面的 xquery 代码,但效果不佳
xquery version "1.0-ml";
let $doc := fn:collection("transform")
for $i in $doc
let $object := json:object() --> I am struck here because i dont know how to create a envelope header
let $source := $i
return $source
感谢任何帮助
谢谢
如果您习惯 XML,那么 JSON 节点映射到 MarkLogic 中的 XQuery 数据模型的方式并不总是直观的。通常,直接使用对象节点可以减少一些混乱:
for $doc in fn:collection("transform")
let $source := $doc/object-node()
let $envelope :=
object-node {
"Code" : "2023"
}
return object-node {
"envelope" : $envelope,
"source" : $source
}
我喜欢 wst 描述的使用 json 节点构造函数的方法,但有时您需要动态添加属性,这对于那些构造函数来说可能很复杂。您还可以使用 json:object()
,它是 map:map()
的特化,或直接使用 map:map()
,并使用 xdmp:to-json
:[=15= 将其转换为 json 节点]
for $doc in fn:collection('transform')
return xdmp:to-json(map:new((
map:entry("envelope", map:new((
map:entry("Code", 2023)
))),
map:entry("source", $doc)
)))
HTH!