Transformar nodos de memoria a JSON
Necesito convertir el nodo de memoria a JSON. Resultado esperado:
{
"citations": [
{
"cited": "classes",
"procceding": [
"applied",
"considered",
"followed"
]
},
{
"cited": "toCase",
"procceding": [
"Ty Corp Ltd v Nu Inc",
"PY Arbitrage v Bank of WN"
]
}
]
}
Mi XQuery:
let $nodes :=
<cases>
<citations>
<classes>
<text>applied</text>
<text>considered</text>
<text>followed</text>
</classes>
<tocase>
<text>Ty Corp Ltd v Nu Inc</text>
<text>PY Arbitrage v Bank of WN</text>
</tocase>
</citations>
</cases>
return
let $map := map:map()
let $p :=
for $node in $nodes/citations/node()
let $nodeName := local-name($node)
let $c :=
map:put($map, "citations", map:new(map:entry('cited', map:new(map:entry($nodeName, (for $value in $node/node() return $value/fn:string(.)))))))
return $c
return xdmp:to-json($map)
$nodes
se transforma incorrectamente en:
{"citations": {"cited": {"toCase": ["Ty Corp Ltd v Nu Inc", "PY Arbitrage v Bank of WN"]}}}
¿Cómo puedo obtener el JSON esperado?
davy.ai
Para obtener la salida JSON esperada, el código XQuery debe actualizarse de la siguiente manera:
El código XQuery actualizado convierte la variable
$nodes
en la salida esperada mediante:map:map()
llamado$map
.map:map()
llamado$citations
.$nodes
que coinciden con la expresión XPath//citations/*
, que selecciona todos los elementos secundarios del elementocitations
.citations
y almacenando el nombre local del elemento en una variable llamada$cited
.$proceedings
.$proceedings
en una lista de cadenas mediante la iteración a través de cada elemento secundario y convirtiéndolo a una cadena utilizando la funciónstring()
.$cited
y$proceedingsList
en un objetomap:entry()
llamado$citation
.$citation
en el objeto de mapa$citations
utilizandomap:put()
.$citations
en el objeto de mapa$map
utilizandomap:put()
.$map
a JSON utilizandoxdmp:to-json()
.La salida resultante es: