JSON: преобразование в JSON имеет дополнительный элемент _value
Я извлекаю документ из базы данных, выбираю часть документа и преобразовываю эту часть в json, используя json:transform-to-json, используя пустую json:config("custom")
для конфигурации. Выбранная мною часть XML не имеет никаких атрибутов, только элементы, но в преобразовании что-то вызывает случай, когда элемент имеет как значение, так и атрибут, и добавляет _value
элемент в JSON, который содержит символы новой строки.
Вот тестовая программа, которую я запустил, где я извлек содержимое из базы данных и возвратил содержимое, преобразование содержимого, а затем преобразование содержимого в жестком коде, которое я только что скопировал из консоли для первой части. Я ожидаю, что преобразования будут такими же, но это не так.
import module namespace json="http://marklogic.com/xdmp/json"
at "/MarkLogic/json/json.xqy";
declare namespace pdbm = "http://schemas.abbvienet.com/people-db/model";
let $person := fn:collection()[1]//pdbm:person/pdbm:account
let $node :=
<account xmlns:pdbe="http://schemas.abbvienet.com/people-db/envelope" xmlns="http://schemas.abbvienet.com/people-db/model">
<domain>ABBVIENET</domain>
<username>KOPECOX</username>
<status>ENABLED</status>
</account>
return ($person, json:transform-to-json($person, json:config("custom")), json:transform-to-json($node, json:config("custom")))
Выбранный контент из db, $person в этом случае преобразуется в:
{
"account": {
"domain": "ABBVIENET",
"username": "KOPECOX",
"status": "ENABLED",
"_value": "\n "
}
}
Принимая во внимание, что $ узел, который является точно таким же контентом, преобразуется в:
{
"account": {
"domain": "ABBVIENET",
"username": "KOPECOX",
"status": "ENABLED"
}
}
2 ответа
Пользовательский json:config на самом деле является map:map, к которому вы можете добавить дополнительные флаги, например, игнорировать пробелы. Это, казалось, помогло:
xquery version "1.0-ml";
import module namespace json="http://marklogic.com/xdmp/json"
at "/MarkLogic/json/json.xqy";
let $node :=
<account xmlns:pdbe="http://schemas.abbvienet.com/people-db/envelope" xmlns="http://schemas.abbvienet.com/people-db/model">
<domain>ABBVIENET</domain>
<username>KOPECOX</username>
<status>ENABLED</status>
{ " " }
</account>
let $config := json:config("custom")
let $_ := map:put($config, "whitespace", "ignore")
return json:transform-to-json($node, $config)
Смотрите также документацию для json:config: http://docs.marklogic.com/json:config
НТН!
Если в вашем XML есть текст, который вы хотите сохранить, вы можете изменить имя поля json по умолчанию, установив ключ "text-value".
- text_value Имя элемента JSON, которое будет использоваться для текста, когда элемент содержит как атрибуты, так и текст.