Элементы XML и свойства JSON с одним и тем же именем могут быть одноуровневыми. То есть:
<container>
<value>value1</value>
<value>value2</value>
</container>
а также
object-node {
"value" : "value1",
"value" : "value2"
}
оба действительны, но я не нашел действительного способа преобразовать одно в другое. Недопустимо динамическое создание свойств в конструкторе object-node
, т.е.:
object-node {
for $v in $values
return 'value' : $v
}
Использование карт не работает, потому что повторяющиеся имена ключей свернуты:
xdmp:to-json(map:new((
map:entry("value", "value1"),
map:entry("value", "value2")))
)
=> {"value":"value2"}
А при использовании 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"}
Соединение карт с помощью оператора +
лучше, но он объединяет повторяющиеся ключи в один ключ с массивом значений ({"value":["value1", "value2"]}
), что все равно не то, что мне нужно. Есть ли способ динамически создавать родственные свойства JSON с тем же именем в XQuery?
xdmp:unquote
позволяет анализировать неуникальные свойства,xdmp:from-json-string
этого не делает и выдает ошибку. - person grtjn   schedule 03.12.2017