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>
    { "&#10;" }
  </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, которое будет использоваться для текста, когда элемент содержит как атрибуты, так и текст.

http://docs.marklogic.com/json:config

Другие вопросы по тегам